blacklight 9.0.0.beta1 → 9.0.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/.docker/app/Dockerfile +2 -1
- data/.github/matrix.json +55 -0
- data/.github/workflows/build.yml +16 -0
- data/.github/workflows/lint.yml +25 -0
- data/.github/workflows/main.yml +22 -0
- data/.github/workflows/release_7_x_scheduled.yml +39 -0
- data/.github/workflows/release_8_x_scheduled.yml +39 -0
- data/.github/workflows/test.yml +53 -0
- data/.rubocop.yml +81 -3
- data/.rubocop_todo.yml +46 -71
- data/.solr_wrapper.yml +3 -1
- data/README.md +2 -2
- data/VERSION +1 -1
- data/app/assets/builds/blacklight.css +51 -38
- data/app/assets/javascripts/blacklight/blacklight.esm.js +62 -77
- data/app/assets/javascripts/blacklight/blacklight.esm.js.map +1 -1
- data/app/assets/javascripts/blacklight/blacklight.js +62 -77
- data/app/assets/javascripts/blacklight/blacklight.js.map +1 -1
- data/app/assets/stylesheets/blacklight/_blacklight_base.scss +0 -1
- data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +4 -0
- data/app/assets/stylesheets/blacklight/_facets.scss +37 -29
- data/app/assets/stylesheets/blacklight/_header.scss +4 -0
- data/app/assets/stylesheets/blacklight/_modal.scss +9 -8
- data/app/assets/stylesheets/blacklight/_pagination.scss +1 -3
- data/app/assets/stylesheets/blacklight/_search_history.scss +0 -4
- data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +3 -0
- data/app/components/blacklight/advanced_search_form_component.html.erb +4 -4
- data/app/components/blacklight/advanced_search_form_component.rb +6 -5
- data/app/components/blacklight/constraint_component.html.erb +1 -5
- data/app/components/blacklight/constraint_component.rb +11 -0
- data/app/components/blacklight/constraint_layout_component.html.erb +1 -6
- data/app/components/blacklight/constraint_layout_component.rb +9 -0
- data/app/components/blacklight/constraints_component.html.erb +3 -8
- data/app/components/blacklight/constraints_component.rb +59 -14
- data/app/components/blacklight/document/action_component.rb +1 -3
- data/app/components/blacklight/document/bookmark_component.html.erb +3 -3
- data/app/components/blacklight/document/bookmark_component.rb +10 -4
- data/app/components/blacklight/document/group_component.html.erb +1 -1
- data/app/components/blacklight/document/more_like_this_component.rb +2 -2
- data/app/components/blacklight/document/page_header_component.rb +3 -3
- data/app/components/blacklight/document/thumbnail_component.html.erb +3 -7
- data/app/components/blacklight/document/thumbnail_component.rb +7 -6
- data/app/components/blacklight/document_component.html.erb +3 -3
- data/app/components/blacklight/document_component.rb +22 -26
- data/app/components/blacklight/document_title_component.rb +6 -10
- data/app/components/blacklight/facet_field_checkboxes_component.rb +4 -18
- data/app/components/blacklight/facet_field_component.rb +4 -15
- data/app/components/blacklight/facet_field_filter_component.rb +4 -19
- data/app/components/blacklight/facet_field_inclusive_constraint_component.rb +4 -23
- data/app/components/blacklight/facet_field_list_component.rb +4 -30
- data/app/components/blacklight/facet_field_no_layout_component.rb +4 -8
- data/app/components/blacklight/facet_field_pagination_component.html.erb +2 -2
- data/app/components/blacklight/facet_item_component.rb +4 -72
- data/app/components/blacklight/facet_item_pivot_component.rb +8 -4
- data/app/components/blacklight/{facet_field_checkboxes_component.html.erb → facets/checkboxes_component.html.erb} +4 -4
- data/app/components/blacklight/facets/checkboxes_component.rb +26 -0
- data/app/components/blacklight/facets/count_component.rb +23 -0
- data/app/components/blacklight/{facet_field_component.html.erb → facets/field_component.html.erb} +1 -3
- data/app/components/blacklight/facets/field_component.rb +23 -0
- data/app/components/blacklight/facets/filters_component.html.erb +4 -0
- data/app/components/blacklight/facets/filters_component.rb +39 -0
- data/app/components/blacklight/{facet_field_inclusive_constraint_component.html.erb → facets/inclusive_constraint_component.html.erb} +1 -1
- data/app/components/blacklight/facets/inclusive_constraint_component.rb +31 -0
- data/app/components/blacklight/{facet_field_filter_component.html.erb → facets/index_navigation_component.html.erb} +1 -1
- data/app/components/blacklight/facets/index_navigation_component.rb +32 -0
- data/app/components/blacklight/facets/item_component.rb +76 -0
- data/app/components/blacklight/facets/list_component.html.erb +11 -0
- data/app/components/blacklight/facets/list_component.rb +46 -0
- data/app/components/blacklight/facets/no_layout_component.rb +16 -0
- data/app/components/blacklight/facets/pivot_list_component.rb +14 -0
- data/app/components/blacklight/facets/selected_value_component.rb +29 -0
- data/app/components/blacklight/facets/suggest_component.html.erb +17 -0
- data/app/components/blacklight/facets/suggest_component.rb +21 -0
- data/app/components/blacklight/header_component.rb +2 -2
- data/app/components/blacklight/icons/remove_component.rb +2 -2
- data/app/components/blacklight/metadata_field_component.html.erb +2 -2
- data/app/components/blacklight/metadata_field_component.rb +2 -1
- data/app/components/blacklight/metadata_field_layout_component.rb +9 -4
- data/app/components/blacklight/metadata_field_plain_text_layout_component.rb +2 -2
- data/app/components/blacklight/response/facet_group_component.html.erb +3 -3
- data/app/components/blacklight/response/facet_group_component.rb +9 -1
- data/app/components/blacklight/search_bar_component.html.erb +2 -2
- data/app/components/blacklight/system/dropdown_component.html.erb +1 -1
- data/app/components/blacklight/system/dropdown_component.rb +1 -1
- data/app/components/blacklight/system/flash_message_component.html.erb +1 -1
- data/app/components/blacklight/system/flash_message_component.rb +0 -9
- data/app/components/blacklight/system/modal_component.html.erb +1 -2
- data/app/components/blacklight/top_navbar_component.html.erb +2 -2
- data/app/controllers/concerns/blacklight/bookmarks.rb +13 -3
- data/app/controllers/concerns/blacklight/catalog.rb +27 -30
- data/app/controllers/concerns/blacklight/controller.rb +1 -1
- data/app/controllers/concerns/blacklight/search_context.rb +1 -1
- data/app/controllers/concerns/blacklight/searchable.rb +1 -1
- data/app/helpers/blacklight/catalog_helper_behavior.rb +5 -3
- data/app/helpers/blacklight/configuration_helper_behavior.rb +2 -2
- data/app/helpers/blacklight/document_helper_behavior.rb +3 -1
- data/app/helpers/blacklight/facets_helper_behavior.rb +7 -12
- data/app/helpers/blacklight/icon_helper_behavior.rb +2 -2
- data/app/javascript/blacklight-frontend/bookmark_toggle.js +7 -2
- data/app/javascript/blacklight-frontend/button_focus.js +1 -1
- data/app/javascript/blacklight-frontend/checkbox_submit.js +9 -2
- data/app/javascript/blacklight-frontend/debounce.js +1 -1
- data/app/javascript/blacklight-frontend/facet_suggest.js +27 -3
- data/app/javascript/blacklight-frontend/index.js +0 -2
- data/app/javascript/blacklight-frontend/modal.js +15 -8
- data/app/javascript/blacklight-frontend/search_context.js +3 -2
- data/app/presenters/blacklight/constraint_presenter.rb +22 -0
- data/app/presenters/blacklight/document_presenter.rb +6 -5
- data/app/presenters/blacklight/facet_field_presenter.rb +18 -2
- data/app/presenters/blacklight/facet_grouped_item_presenter.rb +6 -0
- data/app/presenters/blacklight/facet_item_pivot_presenter.rb +1 -5
- data/app/presenters/blacklight/facet_item_presenter.rb +5 -18
- data/app/presenters/blacklight/field_presenter.rb +4 -2
- data/app/presenters/blacklight/json_presenter.rb +8 -4
- data/app/presenters/blacklight/rendering/abstract_step.rb +7 -1
- data/app/presenters/blacklight/rendering/helper_method.rb +4 -4
- data/app/presenters/blacklight/rendering/join.rb +11 -7
- data/app/presenters/blacklight/rendering/terminator.rb +1 -1
- data/app/services/blacklight/field_retriever.rb +1 -1
- data/app/services/blacklight/search_service.rb +10 -8
- data/app/values/blacklight/types.rb +2 -2
- data/app/views/blacklight/nav/_bookmark.html.erb +1 -1
- data/app/views/catalog/_document.atom.builder +1 -1
- data/app/views/catalog/_document.html.erb +1 -1
- data/app/views/catalog/_email_form.html.erb +4 -4
- data/app/views/catalog/_home_text.html.erb +2 -2
- data/app/views/catalog/_show_main_content.html.erb +9 -5
- data/app/views/catalog/_sms_form.html.erb +4 -4
- data/app/views/catalog/_sort_and_per_page.html.erb +1 -1
- data/app/views/catalog/advanced_search.html.erb +1 -1
- data/app/views/catalog/facet.html.erb +8 -10
- data/app/views/catalog/index.html.erb +0 -1
- data/app/views/catalog/index.json.jbuilder +5 -3
- data/app/views/catalog/show.html.erb +2 -2
- data/app/views/layouts/blacklight/base.html.erb +1 -1
- data/blacklight.gemspec +1 -1
- data/config/locales/blacklight.ar.yml +14 -14
- data/config/locales/blacklight.ca.yml +2 -2
- data/config/locales/blacklight.de.yml +13 -13
- data/config/locales/blacklight.en.yml +3 -3
- data/config/locales/blacklight.es.yml +13 -13
- data/config/locales/blacklight.fr.yml +14 -14
- data/config/locales/blacklight.hu.yml +15 -15
- data/config/locales/blacklight.it.yml +16 -16
- data/config/locales/blacklight.nl.yml +13 -13
- data/config/locales/blacklight.pt-BR.yml +15 -15
- data/config/locales/blacklight.sq.yml +14 -14
- data/config/locales/blacklight.zh.yml +12 -12
- data/lib/blacklight/abstract_repository.rb +2 -2
- data/lib/blacklight/component.rb +7 -1
- data/lib/blacklight/configuration/context.rb +3 -3
- data/lib/blacklight/configuration/facet_field.rb +11 -6
- data/lib/blacklight/configuration/field.rb +4 -4
- data/lib/blacklight/configuration/fields.rb +0 -1
- data/lib/blacklight/configuration/search_field.rb +1 -1
- data/lib/blacklight/configuration/view_config.rb +32 -18
- data/lib/blacklight/configuration.rb +64 -10
- data/lib/blacklight/nested_open_struct_with_hash_access.rb +1 -1
- data/lib/blacklight/open_struct_with_hash_access.rb +2 -2
- data/lib/blacklight/routes/searchable.rb +1 -1
- data/lib/blacklight/search_builder.rb +2 -1
- data/lib/blacklight/search_state/filter_field.rb +4 -4
- data/lib/blacklight/search_state/pivot_filter_field.rb +5 -5
- data/lib/blacklight/search_state.rb +2 -0
- data/lib/blacklight/solr/abstract_filter_query_builder.rb +77 -0
- data/lib/blacklight/solr/default_filter_query_builder.rb +20 -0
- data/lib/blacklight/solr/field_reflection_search_builder.rb +11 -0
- data/lib/blacklight/solr/repository.rb +17 -15
- data/lib/blacklight/solr/response/facets.rb +2 -2
- data/lib/blacklight/solr/response/params.rb +0 -4
- data/lib/blacklight/solr/response.rb +5 -1
- data/lib/blacklight/solr/search_builder_behavior.rb +48 -97
- data/lib/blacklight/solr/single_doc_search_builder.rb +25 -0
- data/lib/blacklight.rb +6 -4
- data/lib/generators/blacklight/assets/importmap_generator.rb +3 -5
- data/lib/generators/blacklight/assets_generator.rb +1 -1
- data/lib/generators/blacklight/search_builder_generator.rb +1 -1
- data/lib/generators/blacklight/templates/.solr_wrapper.yml +3 -1
- data/lib/generators/blacklight/templates/catalog_controller.rb +34 -8
- data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +0 -71
- data/package.json +3 -3
- data/spec/components/blacklight/advanced_search_form_component_spec.rb +18 -22
- data/spec/components/blacklight/constraint_layout_component_spec.rb +8 -8
- data/spec/components/blacklight/constraints_component_spec.rb +11 -11
- data/spec/components/blacklight/document/action_component_spec.rb +23 -15
- data/spec/components/blacklight/document/group_component_spec.rb +10 -15
- data/spec/components/blacklight/document/page_header_component_spec.rb +35 -28
- data/spec/components/blacklight/document/sidebar_component_spec.rb +5 -11
- data/spec/components/blacklight/document_component_spec.rb +105 -79
- data/spec/components/blacklight/facet_component_spec.rb +12 -8
- data/spec/components/blacklight/facet_item_pivot_component_spec.rb +12 -12
- data/spec/components/blacklight/{facet_field_checkboxes_component_spec.rb → facets/checkboxes_component_spec.rb} +13 -13
- data/spec/components/blacklight/facets/filters_component_spec.rb +36 -0
- data/spec/components/blacklight/facets/index_navigation_component_spec.rb +41 -0
- data/spec/components/blacklight/{facet_item_component_spec.rb → facets/item_component_spec.rb} +10 -10
- data/spec/components/blacklight/{facet_field_list_component_spec.rb → facets/list_component_spec.rb} +34 -23
- data/spec/components/blacklight/facets/pivot_list_component_spec.rb +53 -0
- data/spec/components/blacklight/facets/suggest_component_spec.rb +82 -0
- data/spec/components/blacklight/header_component_spec.rb +2 -4
- data/spec/components/blacklight/hidden_search_state_component_spec.rb +7 -7
- data/spec/components/blacklight/metadata_field_component_spec.rb +17 -15
- data/spec/components/blacklight/response/facet_group_component_spec.rb +37 -0
- data/spec/components/blacklight/response/pagination_component_spec.rb +1 -1
- data/spec/components/blacklight/response/spellcheck_component_spec.rb +1 -1
- data/spec/components/blacklight/search_bar_component_spec.rb +28 -5
- data/spec/components/blacklight/search_context/server_applied_params_component_spec.rb +2 -2
- data/spec/components/blacklight/search_context/server_item_pagination_component_spec.rb +3 -5
- data/spec/components/blacklight/skip_link_component_spec.rb +8 -11
- data/spec/components/blacklight/start_over_button_component_spec.rb +4 -4
- data/spec/components/blacklight/system/dropdown_component_spec.rb +26 -0
- data/spec/components/blacklight/system/flash_message_component_spec.rb +7 -11
- data/spec/controllers/blacklight/catalog_spec.rb +1 -1
- data/spec/controllers/catalog_controller_spec.rb +12 -20
- data/spec/features/advanced_search_spec.rb +42 -21
- data/spec/features/facets_spec.rb +84 -12
- data/spec/features/modal_spec.rb +1 -1
- data/spec/features/search_filters_spec.rb +6 -4
- data/spec/features/search_spec.rb +3 -3
- data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +10 -0
- data/spec/lib/blacklight/configuration/facet_field_spec.rb +2 -2
- data/spec/lib/blacklight/parameters_spec.rb +12 -1
- data/spec/lib/blacklight/search_state/filter_field_spec.rb +18 -0
- data/spec/models/blacklight/configuration_spec.rb +178 -28
- data/spec/models/blacklight/solr/default_filter_query_builder_spec.rb +72 -0
- data/spec/models/blacklight/solr/document_spec.rb +0 -4
- data/spec/models/blacklight/solr/repository_spec.rb +37 -29
- data/spec/models/blacklight/solr/response/facets_spec.rb +86 -40
- data/spec/models/blacklight/solr/response/group_response_spec.rb +8 -5
- data/spec/models/blacklight/solr/response/group_spec.rb +9 -5
- data/spec/models/blacklight/solr/response_spec.rb +96 -64
- data/spec/models/blacklight/solr/search_builder_behavior_spec.rb +38 -57
- data/spec/models/solr_document_spec.rb +5 -1
- data/spec/presenters/blacklight/constraint_presenter_spec.rb +32 -0
- data/spec/presenters/blacklight/document_presenter_spec.rb +3 -3
- data/spec/presenters/blacklight/facet_item_presenter_spec.rb +0 -7
- data/spec/presenters/blacklight/field_presenter_spec.rb +103 -22
- data/spec/presenters/blacklight/json_presenter_spec.rb +17 -0
- data/spec/presenters/blacklight/rendering/pipeline_spec.rb +130 -14
- data/spec/services/blacklight/search_service_spec.rb +6 -27
- data/spec/spec_helper.rb +0 -1
- data/spec/support/presenter_test_helpers.rb +1 -1
- data/spec/support/view_component_test_helpers.rb +0 -18
- data/spec/views/catalog/facet.html.erb_spec.rb +10 -3
- data/spec/views/catalog/index.atom.builder_spec.rb +8 -3
- data/spec/views/catalog/index.html.erb_spec.rb +3 -1
- metadata +69 -38
- data/.github/workflows/ruby.yml +0 -98
- data/app/assets/stylesheets/blacklight/_icons.scss +0 -4
- data/app/components/blacklight/facet_field_list_component.html.erb +0 -19
- data/app/components/blacklight/search/facet_suggest_input.html.erb +0 -9
- data/app/components/blacklight/search/facet_suggest_input.rb +0 -16
- data/app/javascript/blacklight-frontend/modalForm.js +0 -60
- data/app/views/catalog/_facet_index_navigation.html.erb +0 -1
- data/app/views/catalog/_facet_layout.html.erb +0 -8
- data/app/views/catalog/_facet_pagination.html.erb +0 -1
- data/app/views/catalog/_facet_pivot.html.erb +0 -3
- data/app/views/shared/_sitelinks_search_box.html.erb +0 -12
- data/spec/components/blacklight/document_metadata_component_spec.rb +0 -0
- data/spec/components/blacklight/search/facet_suggest_input_spec.rb +0 -33
- data/spec/features/sitelinks_search_box_spec.rb +0 -13
- data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +0 -43
- data/spec/views/catalog/_facet_layout.html.erb_spec.rb +0 -41
|
@@ -1,21 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Blacklight
|
|
4
|
-
class FacetFieldComponent <
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
# @param [Blacklight::FacetFieldPresenter] facet_field
|
|
9
|
-
def initialize(facet_field:)
|
|
10
|
-
@facet_field = facet_field
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def html_id
|
|
14
|
-
"facet-#{@facet_field.key.parameterize}"
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def header_html_id
|
|
18
|
-
"#{html_id}-header"
|
|
4
|
+
class FacetFieldComponent < Facets::FieldComponent
|
|
5
|
+
def initialize(...)
|
|
6
|
+
Rails.logger.warn("Blacklight::FacetFieldComponent is deprecated. Use Blacklight::Facets::FacetFieldComponent instead.")
|
|
7
|
+
super
|
|
19
8
|
end
|
|
20
9
|
end
|
|
21
10
|
end
|
|
@@ -1,25 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Blacklight
|
|
4
|
-
class FacetFieldFilterComponent <
|
|
5
|
-
def initialize(
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
def render?
|
|
10
|
-
@facet_field.facet_field.index_range.any?
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def prefix
|
|
14
|
-
@facet_field.paginator.prefix
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def clear_facet_prefix_url
|
|
18
|
-
@facet_field.paginator.params_for_resort_url('index', @facet_field.search_state.to_h.except(@facet_field.paginator.request_keys[:prefix]))
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def facet_prefix_url(letter)
|
|
22
|
-
@facet_field.paginator.params_for_resort_url('index', @facet_field.search_state.to_h.merge(@facet_field.paginator.request_keys[:prefix] => letter))
|
|
4
|
+
class FacetFieldFilterComponent < Facets::IndexNavigationComponent
|
|
5
|
+
def initialize(...)
|
|
6
|
+
Rails.logger.warn("Blacklight::FacetFieldFilterComponent is deprecated. Use Blacklight::Facets::IndexNavigationComponent instead.")
|
|
7
|
+
super
|
|
23
8
|
end
|
|
24
9
|
end
|
|
25
10
|
end
|
|
@@ -1,29 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Blacklight
|
|
4
|
-
class FacetFieldInclusiveConstraintComponent <
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
@facet_field = facet_field
|
|
9
|
-
@values = values
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def values
|
|
13
|
-
@values ||= @facet_field.values.find { |v| v.is_a? Array }
|
|
14
|
-
@values || []
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def render?
|
|
18
|
-
values.present?
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def presenters
|
|
22
|
-
return to_enum(:presenters) unless block_given?
|
|
23
|
-
|
|
24
|
-
values.each do |item|
|
|
25
|
-
yield Blacklight::FacetGroupedItemPresenter.new(values, item, @facet_field.facet_field, helpers, @facet_field.key, @facet_field.search_state)
|
|
26
|
-
end
|
|
4
|
+
class FacetFieldInclusiveConstraintComponent < Facets::InclusiveConstraintComponent
|
|
5
|
+
def initialize(...)
|
|
6
|
+
Rails.logger.warn("Blacklight::FacetFieldInclusiveConstraintComponent is deprecated. Use Blacklight::Facets::InclusiveConstraintComponent instead.")
|
|
7
|
+
super
|
|
27
8
|
end
|
|
28
9
|
end
|
|
29
10
|
end
|
|
@@ -1,36 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Blacklight
|
|
4
|
-
class FacetFieldListComponent <
|
|
5
|
-
def initialize(
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def facet_items(wrapping_element: :li, **item_args)
|
|
11
|
-
facet_item_component_class.with_collection(facet_item_presenters, wrapping_element: wrapping_element, **item_args)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def facet_item_presenters
|
|
15
|
-
@facet_field.paginator.items.map do |item|
|
|
16
|
-
facet_item_presenter(item)
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def render?
|
|
21
|
-
@facet_field.paginator&.items&.any?
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def facet_item_presenter(facet_item)
|
|
25
|
-
facet_config.item_presenter.new(facet_item, facet_config, helpers, @facet_field.key)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def facet_item_component_class
|
|
29
|
-
facet_config.item_component
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def facet_config
|
|
33
|
-
@facet_field.facet_field
|
|
4
|
+
class FacetFieldListComponent < Facets::ListComponent
|
|
5
|
+
def initialize(...)
|
|
6
|
+
Rails.logger.warn("Blacklight::FacetFieldListComponent is deprecated. Use Blacklight::Facets::ListComponent instead.")
|
|
7
|
+
super
|
|
34
8
|
end
|
|
35
9
|
end
|
|
36
10
|
end
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Blacklight
|
|
4
|
-
class FacetFieldNoLayoutComponent <
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def initialize(**); end
|
|
9
|
-
|
|
10
|
-
def call
|
|
11
|
-
body.to_s
|
|
4
|
+
class FacetFieldNoLayoutComponent < Facets::NoLayoutComponent
|
|
5
|
+
def initialize(...)
|
|
6
|
+
Rails.logger.warn("Blacklight::FacetFieldNoLayoutComponent is deprecated. Use Blacklight::Facets::NoLayoutComponent instead.")
|
|
7
|
+
super
|
|
12
8
|
end
|
|
13
9
|
end
|
|
14
10
|
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<div class="prev_next_links btn-group">
|
|
2
2
|
<%= helpers.link_to_previous_page @facet_field.paginator, raw(t('views.pagination.previous')), params: @facet_field.search_state.to_h, param_name: param_name, class: 'btn btn-link', data: { blacklight_modal: "preserve" } do %>
|
|
3
|
-
<%= content_tag :
|
|
3
|
+
<%= content_tag :a, raw(t('views.pagination.previous')), class: 'disabled btn btn-link text-decoration-none', aria: { disabled: true } %>
|
|
4
4
|
<% end %>
|
|
5
5
|
|
|
6
6
|
<%= helpers.link_to_next_page @facet_field.paginator, raw(t('views.pagination.next')), params: @facet_field.search_state.to_h, param_name: param_name, class: 'btn btn-link', data: { blacklight_modal: "preserve" } do %>
|
|
7
|
-
<%= content_tag :
|
|
7
|
+
<%= content_tag :a, raw(t('views.pagination.next')), class: 'disabled btn btn-link text-decoration-none', aria: { disabled: true } %>
|
|
8
8
|
<% end %>
|
|
9
9
|
</div>
|
|
10
10
|
|
|
@@ -1,78 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Blacklight
|
|
4
|
-
class FacetItemComponent <
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
def initialize(facet_item:, wrapping_element: 'li', suppress_link: false)
|
|
10
|
-
@facet_item = facet_item
|
|
11
|
-
@label = facet_item.label
|
|
12
|
-
@hits = facet_item.hits
|
|
13
|
-
@href = facet_item.href
|
|
14
|
-
@selected = facet_item.selected?
|
|
15
|
-
@wrapping_element = wrapping_element
|
|
16
|
-
@suppress_link = suppress_link
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def call
|
|
20
|
-
# if the downstream app has overridden the helper methods we'd usually call,
|
|
21
|
-
# use the helpers to preserve compatibility
|
|
22
|
-
content = if @selected
|
|
23
|
-
render_selected_facet_value
|
|
24
|
-
else
|
|
25
|
-
render_facet_value
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
return '' if content.blank?
|
|
29
|
-
return content unless @wrapping_element
|
|
30
|
-
|
|
31
|
-
content_tag @wrapping_element, content
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
##
|
|
35
|
-
# Standard display of a facet value in a list. Used in both _facets sidebar
|
|
36
|
-
# partial and catalog/facet expanded list. Will output facet value name as
|
|
37
|
-
# a link to add that to your restrictions, with count in parens.
|
|
38
|
-
#
|
|
39
|
-
# @return [String]
|
|
40
|
-
# @private
|
|
41
|
-
def render_facet_value
|
|
42
|
-
tag.span(class: "facet-label") do
|
|
43
|
-
link_to_unless(@suppress_link, label, href, class: "facet-select", rel: "nofollow")
|
|
44
|
-
end + render_facet_count
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
##
|
|
48
|
-
# Standard display of a SELECTED facet value (e.g. without a link and with a remove button)
|
|
49
|
-
# @see #render_facet_value
|
|
50
|
-
#
|
|
51
|
-
# @private
|
|
52
|
-
def render_selected_facet_value
|
|
53
|
-
tag.span(class: "facet-label") do
|
|
54
|
-
tag.span(label, class: "selected") +
|
|
55
|
-
# remove link
|
|
56
|
-
link_to(href, class: "remove", rel: "nofollow") do
|
|
57
|
-
render(Blacklight::Icons::RemoveComponent.new(aria_hidden: true)) +
|
|
58
|
-
tag.span(helpers.t(:'blacklight.search.facets.selected.remove'), class: 'visually-hidden')
|
|
59
|
-
end
|
|
60
|
-
end + render_facet_count(classes: ["selected"])
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
##
|
|
64
|
-
# Renders a count value for facet limits. Can be over-ridden locally
|
|
65
|
-
# to change style. And can be called by plugins to get consistent display.
|
|
66
|
-
#
|
|
67
|
-
# @param [Hash] options
|
|
68
|
-
# @option options [Array<String>] an array of classes to add to count span.
|
|
69
|
-
# @return [String]
|
|
70
|
-
# @private
|
|
71
|
-
def render_facet_count(options = {})
|
|
72
|
-
return '' if hits.blank?
|
|
73
|
-
|
|
74
|
-
classes = (options[:classes] || []) << "facet-count"
|
|
75
|
-
tag.span(t('blacklight.search.facets.count', number: number_with_delimiter(hits)), class: classes)
|
|
4
|
+
class FacetItemComponent < Facets::ItemComponent
|
|
5
|
+
def initialize(...)
|
|
6
|
+
Rails.logger.warn("Blacklight::FacetItemComponent is deprecated. Use Blacklight::Facets::ItemComponent instead.")
|
|
7
|
+
super
|
|
76
8
|
end
|
|
77
9
|
end
|
|
78
10
|
end
|
|
@@ -19,6 +19,10 @@ module Blacklight
|
|
|
19
19
|
|
|
20
20
|
with_collection_parameter :facet_item
|
|
21
21
|
|
|
22
|
+
# @param [Blacklight::FacetItemPivotPresenter] facet_item
|
|
23
|
+
# @param [String] wrapping_element
|
|
24
|
+
# @param [Boolean] suppress_link
|
|
25
|
+
# @param [Boolean] collapsing
|
|
22
26
|
def initialize(facet_item:, wrapping_element: 'li', suppress_link: false, collapsing: nil)
|
|
23
27
|
@facet_item = facet_item
|
|
24
28
|
@wrapping_element = wrapping_element
|
|
@@ -28,17 +32,17 @@ module Blacklight
|
|
|
28
32
|
end
|
|
29
33
|
|
|
30
34
|
def call
|
|
31
|
-
facet = Blacklight::
|
|
35
|
+
facet = Blacklight::Facets::ItemComponent.new(facet_item: @facet_item, wrapping_element: nil, suppress_link: @suppress_link)
|
|
32
36
|
|
|
33
37
|
id = "h-#{self.class.mint_id}" if @collapsing && has_items?
|
|
34
38
|
|
|
35
|
-
content_tag @wrapping_element, class: 'treeitem' do
|
|
39
|
+
content_tag @wrapping_element, class: 'treeitem', role: 'treeitem' do
|
|
36
40
|
concat(content_tag('span', class: "d-flex flex-row align-items-center") do
|
|
37
41
|
concat facet_toggle_button(id) if has_items? && @collapsing
|
|
38
42
|
concat content_tag('span', render(facet), class: "facet-values d-flex flex-row flex-grow-1 #{'facet-leaf-node' if has_items? && @collapsing}", id: id && "#{id}_label")
|
|
39
43
|
end)
|
|
40
44
|
if has_items?
|
|
41
|
-
concat(content_tag('ul', class: "
|
|
45
|
+
concat(content_tag('ul', class: "list-unstyled ps-3 #{'collapse' if @collapsing} #{'show' if expanded?}", id: id, role: 'group') do
|
|
42
46
|
render(
|
|
43
47
|
self.class.with_collection(
|
|
44
48
|
@facet_item.facet_item_presenters.to_a
|
|
@@ -64,7 +68,7 @@ module Blacklight
|
|
|
64
68
|
end
|
|
65
69
|
|
|
66
70
|
def facet_toggle_button(id)
|
|
67
|
-
content_tag 'button', class: %w[btn facet-toggle-handle] + [('collapsed' unless expanded?)],
|
|
71
|
+
content_tag 'button', class: %w[btn focus-ring facet-toggle-handle] + [('collapsed' unless expanded?)],
|
|
68
72
|
data: { toggle: 'collapse', 'bs-toggle': 'collapse', target: "##{id}", 'bs-target': "##{id}" },
|
|
69
73
|
aria: { expanded: expanded?, controls: id, describedby: "#{id}_label" } do
|
|
70
74
|
concat toggle_icon(:show)
|
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
<ul class="facet-values list-unstyled blacklight-facet-checkboxes">
|
|
8
8
|
<% presenters.each_with_index do |presenter, idx| -%>
|
|
9
9
|
<li>
|
|
10
|
-
<span class="facet-checkbox">
|
|
10
|
+
<span class="facet-checkbox flex-shrink-0">
|
|
11
11
|
<%= check_box_tag "f_inclusive[#{@facet_field.key}][]", presenter.value, presenter.selected?, id: "f_inclusive_#{@facet_field.key}_#{idx}"%>
|
|
12
12
|
</span>
|
|
13
13
|
|
|
14
|
-
<span>
|
|
15
|
-
<%= label_tag "f_inclusive_#{@facet_field.key}_#{idx}" do %>
|
|
16
|
-
<span class="facet-label"><%= presenter.label %></span>
|
|
14
|
+
<span class="facet-label-and-count flex-grow-1">
|
|
15
|
+
<%= label_tag "f_inclusive_#{@facet_field.key}_#{idx}", class: 'd-flex' do %>
|
|
16
|
+
<span class="facet-label flex-grow-1"><%= presenter.label %></span>
|
|
17
17
|
<span class="facet-count"><%= t('blacklight.search.facets.count', number: number_with_delimiter(presenter.hits)) %></span>
|
|
18
18
|
<% end %>
|
|
19
19
|
</span>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Facets
|
|
5
|
+
class CheckboxesComponent < Blacklight::Component
|
|
6
|
+
def initialize(facet_field:, layout: nil)
|
|
7
|
+
@facet_field = facet_field
|
|
8
|
+
@layout = layout == false ? Blacklight::Facets::NoLayoutComponent : Blacklight::Facets::FieldComponent
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def render?
|
|
12
|
+
presenters.any?
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def presenters
|
|
16
|
+
return [] unless @facet_field.paginator
|
|
17
|
+
|
|
18
|
+
return to_enum(:presenters) unless block_given?
|
|
19
|
+
|
|
20
|
+
@facet_field.paginator.items.each do |item|
|
|
21
|
+
yield Blacklight::FacetCheckboxItemPresenter.new(item, @facet_field.facet_field, helpers, @facet_field.key, @facet_field.search_state)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Facets
|
|
5
|
+
# Display count of a facet value
|
|
6
|
+
class CountComponent < Blacklight::Component
|
|
7
|
+
def initialize(hits:, classes:)
|
|
8
|
+
@hits = hits
|
|
9
|
+
@classes = classes
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
attr_reader :hits, :classes
|
|
13
|
+
|
|
14
|
+
def render?
|
|
15
|
+
hits.present?
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def call
|
|
19
|
+
tag.span(t('blacklight.search.facets.count', number: number_with_delimiter(hits)), class: classes)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
data/app/components/blacklight/{facet_field_component.html.erb → facets/field_component.html.erb}
RENAMED
|
@@ -3,12 +3,10 @@
|
|
|
3
3
|
<button
|
|
4
4
|
type="button"
|
|
5
5
|
class="btn accordion-button <%= "collapsed" if @facet_field.collapsed? %>"
|
|
6
|
-
data-toggle="collapse"
|
|
7
6
|
data-bs-toggle="collapse"
|
|
8
|
-
data-target="#<%= html_id %>"
|
|
9
7
|
data-bs-target="#<%= html_id %>"
|
|
10
8
|
aria-expanded="<%= @facet_field.collapsed? ? 'false' : 'true' %>"
|
|
11
|
-
|
|
9
|
+
aria-controls="<%= html_id %>"
|
|
12
10
|
>
|
|
13
11
|
<%= label %>
|
|
14
12
|
</button>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Facets
|
|
5
|
+
class FieldComponent < Blacklight::Component
|
|
6
|
+
renders_one :label
|
|
7
|
+
renders_one :body
|
|
8
|
+
|
|
9
|
+
# @param [Blacklight::FacetFieldPresenter] facet_field
|
|
10
|
+
def initialize(facet_field:)
|
|
11
|
+
@facet_field = facet_field
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def html_id
|
|
15
|
+
"facet-#{@facet_field.key.parameterize}"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def header_html_id
|
|
19
|
+
"#{html_id}-header"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight::Facets
|
|
4
|
+
class FiltersComponent < Blacklight::Component
|
|
5
|
+
# @param [Blacklight::FacetFieldPresenter] presenter
|
|
6
|
+
def initialize(presenter:, classes: 'facet-filters mt-1 mb-3',
|
|
7
|
+
suggestions_component: Blacklight::Facets::SuggestComponent,
|
|
8
|
+
index_navigation_component: Blacklight::Facets::IndexNavigationComponent)
|
|
9
|
+
@presenter = presenter
|
|
10
|
+
@classes = classes
|
|
11
|
+
@suggestions_component = suggestions_component
|
|
12
|
+
@index_navigation_component = index_navigation_component
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def facet
|
|
16
|
+
@presenter.facet_field
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
attr_reader :classes, :presenter, :suggestions_component, :index_navigation_component
|
|
20
|
+
|
|
21
|
+
delegate :display_facet, to: :presenter
|
|
22
|
+
|
|
23
|
+
def render?
|
|
24
|
+
presenter.suggest? || render_index_navigation?
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def render_index_navigation?
|
|
28
|
+
facet.index_range && display_facet.index?
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def suggestions
|
|
32
|
+
render suggestions_component.new(presenter: presenter)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def index_navigation
|
|
36
|
+
render index_navigation_component.new(presenter: presenter)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<div class="inclusive_or card card-body bg-light mb-3">
|
|
2
2
|
<h5><%= t('blacklight.advanced_search.any_of') %></h5>
|
|
3
3
|
<ul class="list-unstyled facet-values">
|
|
4
|
-
<%= render
|
|
4
|
+
<%= render Blacklight::Facets::ItemComponent.with_collection(presenters.to_a) %>
|
|
5
5
|
</ul>
|
|
6
6
|
</div>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Facets
|
|
5
|
+
class InclusiveConstraintComponent < Blacklight::Component
|
|
6
|
+
with_collection_parameter :facet_field
|
|
7
|
+
|
|
8
|
+
def initialize(facet_field:, values: nil)
|
|
9
|
+
@facet_field = facet_field
|
|
10
|
+
@values = values
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def values
|
|
14
|
+
@values ||= @facet_field.values.find { |v| v.is_a? Array }
|
|
15
|
+
@values || []
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def render?
|
|
19
|
+
values.present?
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def presenters
|
|
23
|
+
return to_enum(:presenters) unless block_given?
|
|
24
|
+
|
|
25
|
+
values.each do |item|
|
|
26
|
+
yield Blacklight::FacetGroupedItemPresenter.new(values, item, @facet_field.facet_field, helpers, @facet_field.key, @facet_field.search_state)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<li class="page-item <%= 'active' if prefix.blank? %>">
|
|
4
4
|
<%= link_to t('blacklight.search.facets.all'), clear_facet_prefix_url, data: { blacklight_modal: "preserve" }, class: 'page-link' %>
|
|
5
5
|
</li>
|
|
6
|
-
<%
|
|
6
|
+
<% index_range.each do |letter| %>
|
|
7
7
|
<li class="page-item <%= 'active' if prefix == letter %>">
|
|
8
8
|
<%= link_to(letter, facet_prefix_url(letter), class: 'page-link', data: { blacklight_modal: "preserve" }) %>
|
|
9
9
|
</li>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Facets
|
|
5
|
+
class IndexNavigationComponent < Blacklight::Component
|
|
6
|
+
# @params [Blacklight::FacetFieldPresenter] presenter
|
|
7
|
+
def initialize(presenter:)
|
|
8
|
+
@presenter = presenter
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def render?
|
|
12
|
+
index_range && @presenter.display_facet.index?
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def index_range
|
|
16
|
+
@presenter.facet_field.index_range
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def prefix
|
|
20
|
+
@presenter.paginator.prefix
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def clear_facet_prefix_url
|
|
24
|
+
@presenter.paginator.params_for_resort_url('index', @presenter.search_state.to_h.except(@presenter.paginator.request_keys[:prefix]))
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def facet_prefix_url(letter)
|
|
28
|
+
@presenter.paginator.params_for_resort_url('index', @presenter.search_state.to_h.merge(@presenter.paginator.request_keys[:prefix] => letter))
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Facets
|
|
5
|
+
class ItemComponent < Blacklight::Component
|
|
6
|
+
attr_reader :label, :href, :hits
|
|
7
|
+
|
|
8
|
+
with_collection_parameter :facet_item
|
|
9
|
+
|
|
10
|
+
# @param [Blacklight::FacetItemPresenter] facet_item
|
|
11
|
+
# @param [String] wrapping_element
|
|
12
|
+
# @param [Boolean] suppress_link
|
|
13
|
+
def initialize(facet_item:, wrapping_element: 'li', suppress_link: false)
|
|
14
|
+
@facet_item = facet_item
|
|
15
|
+
@label = facet_item.label
|
|
16
|
+
@hits = facet_item.hits
|
|
17
|
+
@href = facet_item.href
|
|
18
|
+
@selected = facet_item.selected?
|
|
19
|
+
@wrapping_element = wrapping_element
|
|
20
|
+
@suppress_link = suppress_link
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def call
|
|
24
|
+
# if the downstream app has overridden the helper methods we'd usually call,
|
|
25
|
+
# use the helpers to preserve compatibility
|
|
26
|
+
content = if @selected
|
|
27
|
+
render_selected_facet_value
|
|
28
|
+
else
|
|
29
|
+
render_facet_value
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
return '' if content.blank?
|
|
33
|
+
return content unless @wrapping_element
|
|
34
|
+
|
|
35
|
+
content_tag @wrapping_element, content
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
##
|
|
39
|
+
# Standard display of a facet value in a list. Used in both _facets sidebar
|
|
40
|
+
# partial and catalog/facet expanded list. Will output facet value name as
|
|
41
|
+
# a link to add that to your restrictions, with count in parens.
|
|
42
|
+
#
|
|
43
|
+
# @return [String]
|
|
44
|
+
# @private
|
|
45
|
+
def render_facet_value
|
|
46
|
+
tag.span(class: "facet-label") do
|
|
47
|
+
link_to_unless(@suppress_link, label, href, class: "facet-select", rel: "nofollow")
|
|
48
|
+
end + render_facet_count
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
##
|
|
52
|
+
# Standard display of a SELECTED facet value (e.g. without a link and with a remove button)
|
|
53
|
+
# @see #render_facet_value
|
|
54
|
+
#
|
|
55
|
+
# @private
|
|
56
|
+
def render_selected_facet_value
|
|
57
|
+
concat render(Blacklight::Facets::SelectedValueComponent.new(label: label, href: href))
|
|
58
|
+
concat render_facet_count(classes: ["selected"])
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
##
|
|
62
|
+
# Renders a count value for facet limits. Can be over-ridden locally
|
|
63
|
+
# to change style. And can be called by plugins to get consistent display.
|
|
64
|
+
#
|
|
65
|
+
# @param [Hash] options
|
|
66
|
+
# @option options [Array<String>] an array of classes to add to count span.
|
|
67
|
+
# @return [String]
|
|
68
|
+
# @private
|
|
69
|
+
def render_facet_count(options = {})
|
|
70
|
+
classes = (options[:classes] || []) << "facet-count"
|
|
71
|
+
|
|
72
|
+
render Blacklight::Facets::CountComponent.new(hits: hits, classes: classes)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<%= render(layout.new(facet_field: @facet_field)) do |component| %>
|
|
2
|
+
<% component.with_label do %>
|
|
3
|
+
<%= @facet_field.label %>
|
|
4
|
+
<% end %>
|
|
5
|
+
<% component.with_body do %>
|
|
6
|
+
<%= render(Blacklight::Facets::InclusiveConstraintComponent.new(facet_field: @facet_field)) %>
|
|
7
|
+
<%= content_tag :ul, class: @classes, role: @role do %>
|
|
8
|
+
<%= render facet_items %>
|
|
9
|
+
<% end %>
|
|
10
|
+
<% end %>
|
|
11
|
+
<% end %>
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Facets
|
|
5
|
+
class ListComponent < Blacklight::Component
|
|
6
|
+
# @param [Blacklight::FacetFieldPresenter] facet_field
|
|
7
|
+
def initialize(facet_field:,
|
|
8
|
+
classes: %w[facet-values list-unstyled],
|
|
9
|
+
role: nil,
|
|
10
|
+
layout: nil)
|
|
11
|
+
@facet_field = facet_field
|
|
12
|
+
@classes = classes
|
|
13
|
+
@role = role
|
|
14
|
+
@layout = layout == false ? Blacklight::Facets::NoLayoutComponent : Blacklight::Facets::FieldComponent
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
attr_accessor :layout, :classes, :role
|
|
18
|
+
|
|
19
|
+
def facet_items(wrapping_element: :li, **item_args)
|
|
20
|
+
facet_item_component_class.with_collection(facet_item_presenters, wrapping_element: wrapping_element, **item_args)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def facet_item_presenters
|
|
24
|
+
@facet_field.paginator.items.map do |item|
|
|
25
|
+
facet_item_presenter(item)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def render?
|
|
30
|
+
@facet_field.paginator&.items&.any?
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def facet_item_presenter(facet_item)
|
|
34
|
+
@facet_field.item_presenter(facet_item)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def facet_item_component_class
|
|
38
|
+
facet_config.item_component
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def facet_config
|
|
42
|
+
@facet_field.facet_field
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|