blacklight 7.33.0 → 8.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/.env +3 -2
- data/.github/workflows/ruby.yml +38 -107
- data/.gitignore +1 -0
- data/.rubocop.yml +243 -2
- data/.rubocop_todo.yml +216 -270
- data/Gemfile +7 -6
- data/README.md +12 -4
- data/Rakefile +18 -0
- data/VERSION +1 -1
- data/app/assets/config/blacklight/manifest.js +3 -0
- data/app/assets/javascripts/blacklight/blacklight.esm.js +376 -0
- data/app/assets/javascripts/blacklight/blacklight.esm.js.map +1 -0
- data/app/assets/javascripts/blacklight/blacklight.js +332 -485
- data/app/assets/javascripts/blacklight/blacklight.js.map +1 -0
- data/app/assets/stylesheets/blacklight/_autocomplete.scss +25 -0
- data/app/assets/stylesheets/blacklight/_blacklight_base.scss +1 -1
- data/app/assets/stylesheets/blacklight/_bookmark.scss +16 -0
- data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +8 -0
- data/app/assets/stylesheets/blacklight/_facets.scss +104 -49
- data/app/assets/stylesheets/blacklight/_header.scss +0 -15
- data/app/assets/stylesheets/blacklight/_icons.scss +0 -14
- data/app/assets/stylesheets/blacklight/_mixins.scss +20 -0
- data/app/assets/stylesheets/blacklight/_modal.scss +8 -2
- data/app/assets/stylesheets/blacklight/_search_form.scss +30 -3
- data/app/assets/stylesheets/blacklight/_search_history.scss +10 -1
- data/app/assets/stylesheets/blacklight/_search_results.scss +6 -2
- data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +4 -1
- data/app/builders/blacklight/action_builder.rb +18 -9
- data/app/components/blacklight/advanced_search_form_component.html.erb +1 -1
- data/app/components/blacklight/advanced_search_form_component.rb +7 -9
- data/app/components/blacklight/constraints_component.rb +27 -37
- data/app/components/blacklight/document/action_component.html.erb +2 -9
- data/app/components/blacklight/document/action_component.rb +26 -8
- data/app/components/blacklight/document/actions_component.rb +2 -2
- data/app/components/blacklight/document/bookmark_component.html.erb +9 -0
- data/app/components/blacklight/document/bookmark_component.rb +4 -2
- data/app/components/blacklight/document/citation_component.rb +5 -3
- data/app/components/blacklight/document/group_component.rb +7 -3
- data/app/components/blacklight/document/show_tools_component.html.erb +12 -0
- data/app/components/blacklight/document/show_tools_component.rb +23 -0
- data/app/components/blacklight/document/sidebar_component.html.erb +2 -0
- data/app/components/blacklight/document/sidebar_component.rb +16 -0
- data/app/components/blacklight/document/thumbnail_component.html.erb +2 -7
- data/app/components/blacklight/document/thumbnail_component.rb +1 -9
- data/app/components/blacklight/document_component.html.erb +4 -0
- data/app/components/blacklight/document_component.rb +54 -42
- data/app/components/blacklight/document_metadata_component.html.erb +4 -2
- data/app/components/blacklight/document_metadata_component.rb +11 -6
- data/app/components/blacklight/document_title_component.rb +4 -1
- data/app/components/blacklight/facet_component.rb +1 -1
- data/app/components/blacklight/facet_field_checkboxes_component.html.erb +3 -3
- data/app/components/blacklight/facet_field_checkboxes_component.rb +1 -1
- data/app/components/blacklight/facet_field_component.html.erb +5 -5
- data/app/components/blacklight/facet_field_component.rb +9 -2
- data/app/components/blacklight/facet_field_list_component.html.erb +3 -3
- data/app/components/blacklight/facet_field_list_component.rb +37 -5
- data/app/components/blacklight/facet_field_no_layout_component.rb +0 -2
- data/app/components/blacklight/facet_item_component.rb +1 -43
- data/app/components/blacklight/facet_item_pivot_component.rb +21 -23
- data/app/components/blacklight/header_component.html.erb +2 -0
- data/app/components/blacklight/header_component.rb +26 -0
- data/app/components/blacklight/hidden_search_state_component.rb +1 -2
- data/app/components/blacklight/icons/legacy_icon_component.rb +30 -0
- data/app/components/blacklight/icons/list_component.rb +16 -0
- data/app/components/blacklight/icons/search_component.rb +16 -0
- data/app/components/blacklight/metadata_field_component.html.erb +2 -2
- data/app/components/blacklight/metadata_field_component.rb +24 -8
- data/app/components/blacklight/metadata_field_layout_component.rb +7 -22
- data/app/components/blacklight/metadata_field_plain_text_layout_component.rb +17 -0
- data/app/components/blacklight/response/facet_group_component.html.erb +5 -6
- data/app/components/blacklight/response/facet_group_component.rb +29 -8
- data/app/components/blacklight/response/sort_component.rb +2 -2
- data/app/components/blacklight/response/spellcheck_component.rb +18 -7
- data/app/components/blacklight/response/view_type_button_component.rb +3 -7
- data/app/components/blacklight/response/view_type_component.rb +4 -6
- data/app/components/blacklight/search/sidebar_component.html.erb +8 -0
- data/app/components/blacklight/search/sidebar_component.rb +17 -0
- data/app/components/blacklight/search_bar_component.html.erb +20 -15
- data/app/components/blacklight/search_bar_component.rb +2 -16
- data/app/components/blacklight/search_button_component.rb +3 -3
- data/app/components/blacklight/search_context/server_applied_params_component.html.erb +4 -0
- data/app/components/blacklight/search_context/server_applied_params_component.rb +13 -0
- data/app/components/blacklight/search_context/server_item_pagination_component.rb +71 -0
- data/app/components/blacklight/search_header_component.html.erb +2 -0
- data/app/components/blacklight/search_header_component.rb +6 -0
- data/app/components/blacklight/search_navbar_component.html.erb +5 -0
- data/app/components/blacklight/search_navbar_component.rb +34 -0
- data/app/components/blacklight/start_over_button_component.rb +5 -3
- data/app/components/blacklight/system/dropdown_component.rb +3 -3
- data/app/components/blacklight/system/flash_message_component.html.erb +3 -1
- data/app/components/blacklight/system/flash_message_component.rb +12 -3
- data/app/components/blacklight/system/modal_component.html.erb +1 -1
- data/app/components/blacklight/system/modal_component.rb +1 -3
- data/app/components/blacklight/top_navbar_component.html.erb +12 -0
- data/app/components/blacklight/top_navbar_component.rb +17 -0
- data/app/controllers/bookmarks_controller.rb +1 -0
- data/app/controllers/catalog_controller.rb +1 -0
- data/app/controllers/concerns/blacklight/bookmarks.rb +11 -6
- data/app/controllers/concerns/blacklight/catalog.rb +21 -72
- data/app/controllers/concerns/blacklight/controller.rb +6 -43
- data/app/controllers/concerns/blacklight/search_context.rb +71 -13
- data/app/controllers/concerns/blacklight/search_history.rb +2 -0
- data/app/controllers/concerns/blacklight/searchable.rb +12 -1
- data/app/controllers/concerns/blacklight/token_based_user.rb +1 -0
- data/app/controllers/search_history_controller.rb +1 -0
- data/app/helpers/blacklight/blacklight_helper_behavior.rb +1 -400
- data/app/helpers/blacklight/catalog_helper_behavior.rb +40 -182
- data/app/helpers/blacklight/component_helper_behavior.rb +1 -63
- data/app/helpers/blacklight/configuration_helper_behavior.rb +2 -117
- data/app/helpers/blacklight/document_helper_behavior.rb +76 -0
- data/app/helpers/blacklight/facets_helper_behavior.rb +4 -321
- data/app/helpers/blacklight/icon_helper_behavior.rb +5 -4
- data/app/helpers/blacklight/layout_helper_behavior.rb +60 -0
- data/app/helpers/blacklight/render_partials_helper_behavior.rb +12 -30
- data/app/helpers/blacklight/url_helper_behavior.rb +21 -97
- data/app/helpers/blacklight_helper.rb +1 -0
- data/app/helpers/catalog_helper.rb +1 -0
- data/app/javascript/blacklight/bookmark_toggle.js +9 -22
- data/app/javascript/blacklight/button_focus.js +9 -7
- data/app/javascript/blacklight/checkbox_submit.js +68 -122
- data/app/javascript/blacklight/core.js +6 -5
- data/app/javascript/blacklight/index.js +14 -0
- data/app/javascript/blacklight/modal.js +100 -165
- data/app/javascript/blacklight/modalForm.js +60 -0
- data/app/javascript/blacklight/search_context.js +13 -29
- data/app/models/blacklight/facet_paginator.rb +3 -2
- data/app/models/blacklight/icon.rb +4 -2
- data/app/models/bookmark.rb +0 -2
- data/app/models/concerns/blacklight/configurable.rb +5 -4
- data/app/models/concerns/blacklight/document/active_model_shim.rb +1 -0
- data/app/models/concerns/blacklight/document/attributes.rb +50 -0
- data/app/models/concerns/blacklight/document/cache_key.rb +1 -0
- data/app/models/concerns/blacklight/document/dublin_core.rb +2 -1
- data/app/models/concerns/blacklight/document/export.rb +2 -1
- data/app/models/concerns/blacklight/document/extensions.rb +1 -0
- data/app/models/concerns/blacklight/document/schema_org.rb +1 -0
- data/app/models/concerns/blacklight/document/semantic_fields.rb +1 -0
- data/app/models/concerns/blacklight/document.rb +23 -20
- data/app/models/concerns/blacklight/suggest/response.rb +1 -0
- data/app/models/concerns/blacklight/user.rb +17 -8
- data/app/models/record_mailer.rb +23 -18
- data/app/models/search.rb +0 -1
- data/app/models/solr_document.rb +1 -0
- data/app/presenters/blacklight/clause_presenter.rb +1 -1
- data/app/presenters/blacklight/document_presenter.rb +24 -30
- data/app/presenters/blacklight/facet_field_presenter.rb +39 -14
- data/app/presenters/blacklight/facet_grouped_item_presenter.rb +1 -5
- data/app/presenters/blacklight/facet_item_pivot_presenter.rb +60 -0
- data/app/presenters/blacklight/facet_item_presenter.rb +3 -9
- data/app/presenters/blacklight/field_presenter.rb +1 -0
- data/app/presenters/blacklight/index_presenter.rb +2 -40
- data/app/presenters/blacklight/json_presenter.rb +7 -5
- data/app/presenters/blacklight/rendering/abstract_step.rb +4 -0
- data/app/presenters/blacklight/rendering/join.rb +7 -1
- data/app/presenters/blacklight/rendering/link_to_facet.rb +3 -6
- data/app/presenters/blacklight/rendering/microdata.rb +1 -1
- data/app/presenters/blacklight/show_presenter.rb +1 -9
- data/app/presenters/blacklight/thumbnail_presenter.rb +1 -1
- data/app/services/blacklight/bookmarks_search_builder.rb +22 -0
- data/app/services/blacklight/field_retriever.rb +1 -8
- data/app/services/blacklight/search_service.rb +9 -7
- data/app/values/blacklight/types.rb +95 -11
- data/app/views/bookmarks/_clear_bookmarks_widget.html.erb +8 -1
- data/app/views/bookmarks/_tools.html.erb +7 -12
- data/app/views/catalog/_advanced_search_form.html.erb +0 -1
- data/app/views/catalog/_bookmark_control.html.erb +1 -1
- data/app/views/catalog/_constraints.html.erb +1 -14
- data/app/views/catalog/_document.atom.builder +12 -14
- data/app/views/catalog/_document.html.erb +3 -6
- data/app/views/catalog/_document.rss.builder +2 -4
- data/app/views/catalog/_document_list.html.erb +2 -1
- data/app/views/catalog/_facet_layout.html.erb +2 -2
- data/app/views/catalog/_facets.html.erb +5 -4
- data/app/views/catalog/_home_text.html.erb +2 -14
- data/app/views/catalog/_search_form.html.erb +3 -3
- data/app/views/catalog/_search_header.html.erb +1 -2
- data/app/views/catalog/_search_results.html.erb +2 -2
- data/app/views/catalog/_search_sidebar.html.erb +5 -1
- data/app/views/catalog/_show_main_content.html.erb +8 -19
- data/app/views/catalog/_show_sidebar.html.erb +2 -2
- data/app/views/catalog/_show_tools.html.erb +1 -19
- data/app/views/catalog/_view_type_group.html.erb +1 -1
- data/app/views/catalog/email_success.html.erb +5 -6
- data/app/views/catalog/facet.html.erb +7 -5
- data/app/views/catalog/index.atom.builder +12 -14
- data/app/views/catalog/index.html.erb +7 -1
- data/app/views/catalog/index.json.jbuilder +19 -19
- data/app/views/catalog/index.rss.builder +1 -1
- data/app/views/catalog/opensearch.xml.builder +1 -1
- data/app/views/catalog/show.html.erb +1 -6
- data/app/views/catalog/sms_success.html.erb +5 -6
- data/app/views/catalog/suggest.html.erb +3 -0
- data/app/views/layouts/blacklight/base.html.erb +19 -9
- data/app/views/record_mailer/email_record.text.erb +4 -3
- data/app/views/record_mailer/sms_record.text.erb +4 -4
- data/app/views/search_history/index.html.erb +6 -2
- data/app/views/shared/_header_navbar.html.erb +1 -22
- data/app/views/shared/_modal.html.erb +3 -3
- data/blacklight.gemspec +8 -10
- data/config/importmap.rb +3 -0
- data/config/locales/blacklight.ar.yml +209 -233
- data/config/locales/blacklight.ca.yml +0 -7
- data/config/locales/blacklight.de.yml +197 -216
- data/config/locales/blacklight.en.yml +2 -7
- data/config/locales/blacklight.es.yml +196 -216
- data/config/locales/blacklight.fr.yml +196 -220
- data/config/locales/blacklight.hu.yml +193 -213
- data/config/locales/blacklight.it.yml +197 -216
- data/config/locales/blacklight.nl.yml +193 -213
- data/config/locales/blacklight.pt-BR.yml +195 -216
- data/config/locales/blacklight.sq.yml +193 -213
- data/config/locales/blacklight.zh.yml +194 -214
- data/config/routes.rb +3 -2
- data/db/migrate/20140202020201_create_searches.rb +1 -0
- data/db/migrate/20140202020202_create_bookmarks.rb +1 -0
- data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -0
- data/docker-compose.yml +1 -0
- data/lib/blacklight/abstract_repository.rb +1 -0
- data/lib/blacklight/configuration/context.rb +4 -4
- data/lib/blacklight/configuration/display_field.rb +7 -9
- data/lib/blacklight/configuration/facet_field.rb +17 -11
- data/lib/blacklight/configuration/field.rb +1 -0
- data/lib/blacklight/configuration/fields.rb +12 -15
- data/lib/blacklight/configuration/index_field.rb +1 -0
- data/lib/blacklight/configuration/null_display_field.rb +17 -0
- data/lib/blacklight/configuration/search_field.rb +1 -0
- data/lib/blacklight/configuration/session_tracking_config.rb +45 -0
- data/lib/blacklight/configuration/show_field.rb +1 -0
- data/lib/blacklight/configuration/sort_field.rb +1 -0
- data/lib/blacklight/configuration/tool_config.rb +1 -0
- data/lib/blacklight/configuration/view_config.rb +16 -10
- data/lib/blacklight/configuration.rb +322 -341
- data/lib/blacklight/engine.rb +13 -15
- data/lib/blacklight/exceptions.rb +2 -2
- data/lib/blacklight/nested_open_struct_with_hash_access.rb +6 -12
- data/lib/blacklight/open_struct_with_hash_access.rb +19 -17
- data/lib/blacklight/parameters.rb +7 -21
- data/lib/blacklight/routes/exportable.rb +1 -0
- data/lib/blacklight/routes/searchable.rb +3 -1
- data/lib/blacklight/routes.rb +1 -0
- data/lib/blacklight/search_builder.rb +10 -10
- data/lib/blacklight/search_state/filter_field.rb +8 -25
- data/lib/blacklight/search_state/pivot_filter_field.rb +144 -0
- data/lib/blacklight/search_state.rb +23 -79
- data/lib/blacklight/solr/document.rb +1 -0
- data/lib/blacklight/solr/facet_paginator.rb +1 -0
- data/lib/blacklight/solr/repository.rb +1 -0
- data/lib/blacklight/solr/request.rb +3 -0
- data/lib/blacklight/solr/response/facets.rb +21 -5
- data/lib/blacklight/solr/response/group.rb +1 -0
- data/lib/blacklight/solr/response/group_response.rb +1 -0
- data/lib/blacklight/solr/response/more_like_this.rb +1 -0
- data/lib/blacklight/solr/response/pagination_methods.rb +4 -3
- data/lib/blacklight/solr/response/params.rb +5 -4
- data/lib/blacklight/solr/response/response.rb +1 -0
- data/lib/blacklight/solr/response/spelling.rb +1 -0
- data/lib/blacklight/solr/response.rb +4 -3
- data/lib/blacklight/solr/search_builder_behavior.rb +16 -32
- data/lib/blacklight/solr.rb +1 -0
- data/lib/blacklight/version.rb +1 -0
- data/lib/blacklight.rb +8 -11
- data/lib/generators/blacklight/assets/importmap_generator.rb +56 -0
- data/lib/generators/blacklight/assets/propshaft_generator.rb +34 -0
- data/lib/generators/blacklight/assets/sprockets_generator.rb +68 -0
- data/lib/generators/blacklight/assets_generator.rb +14 -88
- data/lib/generators/blacklight/controller_generator.rb +3 -2
- data/lib/generators/blacklight/document_generator.rb +1 -0
- data/lib/generators/blacklight/install_generator.rb +7 -4
- data/lib/generators/blacklight/models_generator.rb +1 -0
- data/lib/generators/blacklight/search_builder_generator.rb +1 -0
- data/lib/generators/blacklight/solr_generator.rb +1 -1
- data/lib/generators/blacklight/templates/catalog_controller.rb +37 -7
- data/lib/generators/blacklight/templates/solr_document.rb +1 -7
- data/lib/generators/blacklight/test_support_generator.rb +4 -2
- data/lib/generators/blacklight/user_generator.rb +7 -9
- data/lib/railties/blacklight.rake +2 -3
- data/package.json +10 -10
- data/rollup.config.js +37 -0
- data/spec/components/blacklight/constraints_component_spec.rb +17 -13
- data/spec/components/blacklight/document_component_spec.rb +74 -33
- data/spec/components/blacklight/facet_component_spec.rb +2 -7
- data/spec/components/blacklight/facet_field_checkboxes_component_spec.rb +1 -2
- data/spec/components/blacklight/facet_field_list_component_spec.rb +7 -6
- data/spec/components/blacklight/facet_item_pivot_component_spec.rb +9 -7
- data/spec/components/blacklight/header_component_spec.rb +20 -0
- data/spec/components/blacklight/response/view_type_component_spec.rb +83 -0
- data/spec/components/blacklight/search_bar_component_spec.rb +1 -1
- data/spec/components/blacklight/search_context/server_applied_params_component_spec.rb +29 -0
- data/spec/components/blacklight/search_context/server_item_pagination_component_spec.rb +51 -0
- data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +1 -6
- data/spec/controllers/blacklight/{base_spec.rb → catalog_spec.rb} +2 -2
- data/spec/controllers/bookmarks_controller_spec.rb +2 -3
- data/spec/controllers/catalog_controller_spec.rb +24 -126
- data/spec/features/autocomplete_spec.rb +1 -1
- data/spec/features/axe_spec.rb +1 -1
- data/spec/features/bookmarks_spec.rb +1 -1
- data/spec/features/component_template_override_spec.rb +8 -0
- data/spec/features/facets_spec.rb +1 -1
- data/spec/features/modal_spec.rb +12 -0
- data/spec/features/search_context_spec.rb +4 -10
- data/spec/features/search_results_spec.rb +0 -33
- data/spec/features/sitelinks_search_box_spec.rb +13 -0
- data/spec/helpers/blacklight/configuration_helper_behavior_spec.rb +2 -138
- data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +0 -387
- data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +8 -0
- data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +5 -7
- data/spec/helpers/blacklight/url_helper_behavior_spec.rb +10 -132
- data/spec/helpers/blacklight_helper_spec.rb +3 -298
- data/spec/helpers/catalog_helper_spec.rb +60 -115
- data/spec/i18n_spec.rb +1 -0
- data/spec/integration/generators/blacklight/solr_generator_spec.rb +1 -1
- data/spec/lib/blacklight/configuration/facet_field_spec.rb +27 -16
- data/spec/lib/blacklight/configuration/field_spec.rb +1 -1
- data/spec/lib/blacklight/configuration/session_tracking_config_spec.rb +38 -0
- data/spec/lib/blacklight/configuration/view_config_spec.rb +1 -1
- data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +4 -4
- data/spec/lib/blacklight/parameters_spec.rb +1 -4
- data/spec/lib/blacklight/search_state/filter_field_spec.rb +4 -4
- data/spec/lib/blacklight/search_state/pivot_filter_field_spec.rb +117 -0
- data/spec/lib/blacklight/search_state_spec.rb +80 -198
- data/spec/lib/tasks/blacklight_task_spec.rb +1 -0
- data/spec/models/blacklight/configuration_spec.rb +41 -53
- data/spec/models/blacklight/document/active_model_shim_spec.rb +2 -2
- data/spec/models/blacklight/icon_spec.rb +29 -15
- data/spec/models/blacklight/search_builder_spec.rb +12 -12
- data/spec/models/blacklight/solr/document_spec.rb +3 -3
- data/spec/models/blacklight/solr/request_spec.rb +2 -2
- data/spec/models/blacklight/solr/response/facets_spec.rb +27 -27
- data/spec/models/blacklight/solr/response/group_response_spec.rb +1 -0
- data/spec/models/blacklight/solr/response/group_spec.rb +1 -0
- data/spec/models/blacklight/solr/response_spec.rb +9 -2
- data/spec/models/blacklight/solr/search_builder_spec.rb +32 -23
- data/spec/models/blacklight/user_spec.rb +22 -0
- data/spec/models/record_mailer_spec.rb +36 -23
- data/spec/models/solr_document_spec.rb +21 -3
- data/spec/presenters/blacklight/clause_presenter_spec.rb +1 -0
- data/spec/presenters/blacklight/document_presenter_spec.rb +3 -2
- data/spec/presenters/blacklight/facet_field_presenter_spec.rb +85 -12
- data/spec/presenters/blacklight/facet_grouped_item_presenter_spec.rb +1 -0
- data/spec/presenters/blacklight/facet_item_presenter_spec.rb +14 -13
- data/spec/presenters/blacklight/field_presenter_spec.rb +2 -16
- data/spec/presenters/blacklight/index_presenter_spec.rb +3 -4
- data/spec/presenters/blacklight/json_presenter_spec.rb +1 -0
- data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -2
- data/spec/presenters/blacklight/show_presenter_spec.rb +11 -25
- data/spec/presenters/pipeline_spec.rb +13 -2
- data/spec/presenters/thumbnail_presenter_spec.rb +1 -1
- data/spec/requests/load_suggestions_spec.rb +16 -0
- data/spec/routing/catalog_routing_spec.rb +6 -1
- data/spec/services/blacklight/search_service_spec.rb +31 -68
- data/spec/spec_helper.rb +4 -3
- data/spec/support/controller_level_helpers.rb +1 -2
- data/spec/support/features/search_helpers.rb +39 -0
- data/spec/support/features/session_helpers.rb +1 -0
- data/spec/support/features.rb +3 -0
- data/spec/support/view_component_test_helpers.rb +21 -0
- data/spec/test_app_templates/Gemfile.extra +4 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +17 -2
- data/spec/views/catalog/_document.html.erb_spec.rb +23 -33
- data/spec/views/catalog/_document_list.html.erb_spec.rb +7 -2
- data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -1
- data/spec/views/catalog/_search_header.erb_spec.rb +1 -0
- data/spec/views/catalog/_show_sidebar.erb_spec.rb +1 -0
- data/spec/views/catalog/_show_tools.html.erb_spec.rb +7 -54
- data/spec/views/catalog/_view_type_group.html.erb_spec.rb +17 -9
- data/spec/views/catalog/email_success.html.erb_spec.rb +2 -2
- data/spec/views/catalog/facet.html.erb_spec.rb +6 -3
- data/spec/views/catalog/index.atom.builder_spec.rb +18 -11
- data/spec/views/catalog/index.html.erb_spec.rb +5 -6
- data/spec/views/catalog/index.json.jbuilder_spec.rb +3 -3
- data/spec/views/catalog/show.html.erb_spec.rb +3 -25
- data/spec/views/catalog/sms_success.html.erb_spec.rb +2 -2
- data/tasks/blacklight.rake +7 -5
- metadata +95 -123
- data/.babelrc +0 -11
- data/app/assets/images/blacklight/list.svg +0 -1
- data/app/assets/images/blacklight/search.svg +0 -1
- data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +0 -37
- data/app/components/blacklight/content_areas_shim.rb +0 -13
- data/app/components/blacklight/search_context_component.rb +0 -34
- data/app/controllers/concerns/blacklight/base.rb +0 -7
- data/app/controllers/concerns/blacklight/default_component_configuration.rb +0 -64
- data/app/controllers/concerns/blacklight/facet.rb +0 -69
- data/app/controllers/concerns/blacklight/search_fields.rb +0 -46
- data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +0 -27
- data/app/helpers/blacklight/render_constraints_helper_behavior.rb +0 -188
- data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +0 -97
- data/app/helpers/blacklight/suggest_helper_behavior.rb +0 -13
- data/app/javascript/blacklight/autocomplete.js +0 -36
- data/app/javascript/blacklight/facet_load.js +0 -22
- data/app/models/concerns/blacklight/document/email.rb +0 -26
- data/app/models/concerns/blacklight/document/sms.rb +0 -24
- data/app/presenters/blacklight/search_bar_presenter.rb +0 -47
- data/app/views/catalog/_constraints_element.html.erb +0 -14
- data/app/views/catalog/_document_action.html.erb +0 -5
- data/app/views/catalog/_facet_group.html.erb +0 -5
- data/app/views/catalog/_facet_limit.html.erb +0 -3
- data/app/views/catalog/_index.html.erb +0 -1
- data/app/views/catalog/_index_header.html.erb +0 -22
- data/app/views/catalog/_previous_next_doc.html.erb +0 -2
- data/app/views/catalog/_show.html.erb +0 -6
- data/app/views/catalog/_show_header.html.erb +0 -2
- data/app/views/catalog/_thumbnail.html.erb +0 -1
- data/lib/blacklight/deprecations/engine_configuration.rb +0 -66
- data/lib/blacklight/deprecations/search_state_normalization.rb +0 -52
- data/spec/controllers/blacklight/facet_spec.rb +0 -33
- data/spec/controllers/blacklight/search_fields_spec.rb +0 -62
- data/spec/features/sitelinks_search_box.rb +0 -13
- data/spec/helpers/blacklight/hash_as_hidden_fields_behavior_spec.rb +0 -26
- data/spec/helpers/blacklight/render_constraints_helper_behavior_spec.rb +0 -92
- data/spec/helpers/blacklight/search_history_constraints_helper_behavior_spec.rb +0 -108
- data/spec/helpers/blacklight/suggest_helper_behavior_spec.rb +0 -48
- data/spec/lib/blacklight/engine_spec.rb +0 -41
- data/spec/models/blacklight/document/email_spec.rb +0 -57
- data/spec/models/blacklight/document/sms_spec.rb +0 -58
- data/spec/presenters/blacklight/search_bar_presenter_spec.rb +0 -94
- data/spec/support/view_component_capybara_test_helpers.rb +0 -8
- data/spec/views/catalog/_constraints.html.erb_spec.rb +0 -33
- data/spec/views/catalog/_facet_group.html.erb_spec.rb +0 -84
- data/spec/views/catalog/_facets.html.erb_spec.rb +0 -15
- data/spec/views/catalog/_index.html.erb_spec.rb +0 -62
- data/spec/views/catalog/_index_header.html.erb_spec.rb +0 -35
- data/spec/views/catalog/_previous_next_doc.html.erb_spec.rb +0 -22
- data/spec/views/catalog/_show.html.erb_spec.rb +0 -62
- data/spec/views/catalog/_thumbnail.html.erb_spec.rb +0 -38
- /data/app/components/blacklight/{search_context_component.html.erb → search_context/server_item_pagination_component.html.erb} +0 -0
|
@@ -21,6 +21,7 @@ module Blacklight::Document
|
|
|
21
21
|
include Blacklight::Document::SemanticFields
|
|
22
22
|
include Blacklight::Document::CacheKey
|
|
23
23
|
include Blacklight::Document::Export
|
|
24
|
+
include Blacklight::Document::Attributes
|
|
24
25
|
|
|
25
26
|
included do
|
|
26
27
|
extend ActiveModel::Naming
|
|
@@ -30,6 +31,17 @@ module Blacklight::Document
|
|
|
30
31
|
class_attribute :inspector_fields, default: [:_source]
|
|
31
32
|
end
|
|
32
33
|
|
|
34
|
+
Email = Module.new do
|
|
35
|
+
def self.included(mod)
|
|
36
|
+
Blacklight.deprecation.warn("Blacklight::Document::Email is deprecated and will be removed (included in #{mod}).")
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
Sms = Module.new do
|
|
40
|
+
def self.included(mod)
|
|
41
|
+
Blacklight.deprecation.warn("Blacklight::Document::Sms is deprecated and will be removed (included in #{mod}).")
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
33
45
|
attr_reader :response, :_source
|
|
34
46
|
alias_method :solr_response, :response
|
|
35
47
|
|
|
@@ -70,13 +82,20 @@ module Blacklight::Document
|
|
|
70
82
|
alias has_field? has?
|
|
71
83
|
alias has_key? key?
|
|
72
84
|
|
|
73
|
-
|
|
85
|
+
NO_DEFAULT_PROVIDED = Object.new # :nodoc:
|
|
86
|
+
def fetch key, default = NO_DEFAULT_PROVIDED
|
|
74
87
|
if key? key
|
|
75
88
|
self[key]
|
|
76
|
-
elsif
|
|
77
|
-
|
|
89
|
+
elsif block_given?
|
|
90
|
+
yield(self) if block_given?
|
|
91
|
+
elsif default != NO_DEFAULT_PROVIDED
|
|
92
|
+
if default.respond_to?(:call)
|
|
93
|
+
default.call(self)
|
|
94
|
+
else
|
|
95
|
+
default
|
|
96
|
+
end
|
|
78
97
|
else
|
|
79
|
-
|
|
98
|
+
raise KeyError, "key not found \"#{key}\""
|
|
80
99
|
end
|
|
81
100
|
end
|
|
82
101
|
|
|
@@ -116,21 +135,5 @@ module Blacklight::Document
|
|
|
116
135
|
def unique_key
|
|
117
136
|
@unique_key ||= 'id'
|
|
118
137
|
end
|
|
119
|
-
|
|
120
|
-
# Define an attribute reader on a document model
|
|
121
|
-
# @example
|
|
122
|
-
# class SolrDocument
|
|
123
|
-
# include Blacklight::Solr::Document
|
|
124
|
-
# attribute :title, Blacklight::Types::String, 'title_tesim'
|
|
125
|
-
# end
|
|
126
|
-
#
|
|
127
|
-
# doc = SolrDocument.new(title_tesim: ["One flew over the cuckoo's nest"])
|
|
128
|
-
# doc.title
|
|
129
|
-
# #=> "One flew over the cuckoo's nest"
|
|
130
|
-
def attribute(name, type, field)
|
|
131
|
-
define_method name do
|
|
132
|
-
type.coerce(self[field])
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
138
|
end
|
|
136
139
|
end
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Blacklight::User
|
|
3
|
-
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
return unless base.respond_to? :has_many
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
# SEE ALSO: The lib/blacklight/generator/user_generator.rb class for where this
|
|
6
|
+
# is generated into the hosting application.
|
|
7
|
+
included do
|
|
8
|
+
class_attribute :string_display_key
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
has_many :bookmarks, dependent: :destroy, as: :user
|
|
11
|
+
has_many :searches, dependent: :destroy, as: :user
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def bookmarks_for_documents documents = []
|
|
@@ -28,4 +28,13 @@ module Blacklight::User
|
|
|
28
28
|
def existing_bookmark_for(document)
|
|
29
29
|
bookmarks_for_documents([document]).first
|
|
30
30
|
end
|
|
31
|
+
|
|
32
|
+
##
|
|
33
|
+
# @return [String] a user-displayable login/identifier for the user account
|
|
34
|
+
def to_s
|
|
35
|
+
string_display_key = self.class.string_display_key
|
|
36
|
+
return send(string_display_key) if respond_to?(string_display_key)
|
|
37
|
+
|
|
38
|
+
super
|
|
39
|
+
end
|
|
31
40
|
end
|
data/app/models/record_mailer.rb
CHANGED
|
@@ -1,28 +1,23 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# Only works for documents with a #to_marc right now.
|
|
3
|
-
class RecordMailer < ActionMailer::Base
|
|
4
|
-
def email_record(documents, details, url_gen_params)
|
|
5
|
-
title = begin
|
|
6
|
-
title_field = details[:config].email.title_field
|
|
7
|
-
if title_field
|
|
8
|
-
[documents.first[title_field]].flatten.first
|
|
9
|
-
else
|
|
10
|
-
documents.first.to_semantic_values[:title]
|
|
11
|
-
end
|
|
12
|
-
rescue
|
|
13
|
-
I18n.t('blacklight.email.text.default_title')
|
|
14
|
-
end
|
|
15
2
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
3
|
+
# Only works for documents with a #to_marc right now.
|
|
4
|
+
class RecordMailer < ApplicationMailer
|
|
5
|
+
helper CatalogHelper
|
|
6
|
+
helper_method :blacklight_config, :blacklight_configuration_context
|
|
19
7
|
|
|
8
|
+
def email_record(documents, details, url_gen_params)
|
|
20
9
|
@documents = documents
|
|
21
10
|
@message = details[:message]
|
|
22
11
|
@config = details[:config]
|
|
23
12
|
@url_gen_params = url_gen_params
|
|
24
13
|
|
|
25
|
-
|
|
14
|
+
title = view_context.document_presenter(documents.first).html_title || I18n.t('blacklight.email.text.default_title')
|
|
15
|
+
|
|
16
|
+
subject = I18n.t('blacklight.email.text.subject',
|
|
17
|
+
count: documents.length,
|
|
18
|
+
title: Array(title).first)
|
|
19
|
+
|
|
20
|
+
mail(to: details[:to], subject: subject)
|
|
26
21
|
end
|
|
27
22
|
|
|
28
23
|
def sms_record(documents, details, url_gen_params)
|
|
@@ -30,6 +25,16 @@ class RecordMailer < ActionMailer::Base
|
|
|
30
25
|
@config = details[:config]
|
|
31
26
|
@url_gen_params = url_gen_params
|
|
32
27
|
|
|
33
|
-
mail(to: details[:to], subject: "")
|
|
28
|
+
mail(to: details[:to], subject: "") # rubocop:disable Rails/I18nLocaleTexts
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def blacklight_config
|
|
32
|
+
@config || Blacklight.default_configuration
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
##
|
|
36
|
+
# Context in which to evaluate blacklight configuration conditionals
|
|
37
|
+
def blacklight_configuration_context
|
|
38
|
+
@blacklight_configuration_context ||= Blacklight::Configuration::Context.new(self)
|
|
34
39
|
end
|
|
35
40
|
end
|
data/app/models/search.rb
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
class Search < ApplicationRecord
|
|
4
4
|
belongs_to :user, optional: true
|
|
5
5
|
|
|
6
|
-
# use a backwards-compatible serializer until the Rails API stabilizes and we can evaluate for major-revision compatibility
|
|
7
6
|
serialize :query_params, Blacklight::SearchParamsYamlCoder
|
|
8
7
|
|
|
9
8
|
# A Search instance is considered a saved search if it has a user_id.
|
data/app/models/solr_document.rb
CHANGED
|
@@ -29,7 +29,7 @@ module Blacklight
|
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def remove_href(path = search_state)
|
|
32
|
-
view_context.search_action_path(path.reset_search(clause: path.clause_params.except(key))
|
|
32
|
+
view_context.search_action_path(path.reset_search(clause: path.clause_params.except(key)))
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
private
|
|
@@ -11,18 +11,20 @@ module Blacklight
|
|
|
11
11
|
# @param [SolrDocument] document
|
|
12
12
|
# @param [ActionView::Base] view_context scope for linking and generating urls
|
|
13
13
|
# @param [Blacklight::Configuration] configuration
|
|
14
|
-
def initialize(document, view_context, configuration = view_context.blacklight_config)
|
|
14
|
+
def initialize(document, view_context, configuration = view_context.blacklight_config, view_config: nil, field_presenter_options: {})
|
|
15
15
|
@document = document
|
|
16
16
|
@view_context = view_context
|
|
17
17
|
@configuration = configuration
|
|
18
|
+
@view_config = view_config
|
|
19
|
+
@field_presenter_options = field_presenter_options
|
|
18
20
|
end
|
|
19
21
|
|
|
20
22
|
# @return [Hash<String,Configuration::Field>] all the fields for this index view that should be rendered
|
|
21
|
-
def fields_to_render
|
|
22
|
-
return to_enum(:fields_to_render) unless block_given?
|
|
23
|
+
def fields_to_render(document_fields = fields, **kwargs)
|
|
24
|
+
return to_enum(:fields_to_render, document_fields, **kwargs) unless block_given?
|
|
23
25
|
|
|
24
|
-
|
|
25
|
-
field_presenter = field_presenter(field_config)
|
|
26
|
+
document_fields.each do |name, field_config|
|
|
27
|
+
field_presenter = field_presenter(field_config, kwargs)
|
|
26
28
|
|
|
27
29
|
next unless field_presenter.render_field? && field_presenter.any?
|
|
28
30
|
|
|
@@ -30,10 +32,10 @@ module Blacklight
|
|
|
30
32
|
end
|
|
31
33
|
end
|
|
32
34
|
|
|
33
|
-
def field_presenters
|
|
34
|
-
return to_enum(:field_presenters) unless block_given?
|
|
35
|
+
def field_presenters(document_fields = fields, **kwargs)
|
|
36
|
+
return to_enum(:field_presenters, document_fields, **kwargs) unless block_given?
|
|
35
37
|
|
|
36
|
-
fields_to_render.each { |_, _, config| yield config }
|
|
38
|
+
fields_to_render(document_fields, **kwargs).each { |_, _, config| yield config }
|
|
37
39
|
end
|
|
38
40
|
|
|
39
41
|
##
|
|
@@ -79,10 +81,8 @@ module Blacklight
|
|
|
79
81
|
|
|
80
82
|
fields += ['format'] if fields.empty? # backwards compatibility with the old default value for display_type_field
|
|
81
83
|
|
|
82
|
-
display_type = fields.lazy.map { |field| field_presenter(
|
|
83
|
-
display_type
|
|
84
|
-
|
|
85
|
-
display_type || []
|
|
84
|
+
display_type = fields.lazy.map { |field| field_presenter(display_fields[field] || Configuration::NullDisplayField.new(field)) }.detect(&:any?)&.values
|
|
85
|
+
display_type || Array(default)
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
##
|
|
@@ -122,7 +122,7 @@ module Blacklight
|
|
|
122
122
|
end
|
|
123
123
|
|
|
124
124
|
def show_view_config
|
|
125
|
-
configuration.view_config(:show)
|
|
125
|
+
configuration.view_config(:show, action_name: view_context.action_name)
|
|
126
126
|
end
|
|
127
127
|
|
|
128
128
|
def inspect
|
|
@@ -132,33 +132,27 @@ module Blacklight
|
|
|
132
132
|
|
|
133
133
|
private
|
|
134
134
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
def has_value?(field_config)
|
|
141
|
-
field_presenter(field_config).any?
|
|
135
|
+
# @return [Hash<String,Configuration::Field>]
|
|
136
|
+
def fields
|
|
137
|
+
@fields ||= Array(display_type).inject(display_fields) do |fields, display_type|
|
|
138
|
+
fields.merge(display_fields(configuration.for_display_type(display_type)))
|
|
139
|
+
end
|
|
142
140
|
end
|
|
143
|
-
deprecation_deprecate has_value?: 'Use FieldPresenter#any?'
|
|
144
141
|
|
|
145
|
-
def
|
|
146
|
-
|
|
142
|
+
def display_fields(config = configuration)
|
|
143
|
+
config[view_config.document_fields_key || :index_fields]
|
|
147
144
|
end
|
|
148
|
-
deprecation_deprecate field_values: 'Use #field_value'
|
|
149
145
|
|
|
150
|
-
def
|
|
151
|
-
|
|
146
|
+
def field_config(field)
|
|
147
|
+
fields.fetch(field) { Configuration::NullDisplayField.new(field) }
|
|
152
148
|
end
|
|
153
|
-
deprecation_deprecate retrieve_values: 'Use FieldPresenter#values'
|
|
154
149
|
|
|
155
150
|
def field_presenter(field_config, options = {})
|
|
156
|
-
|
|
157
|
-
presenter_class.new(view_context, document, field_config, options.merge(field_presenter_options))
|
|
151
|
+
field_config.presenter.new(view_context, document, field_config, field_presenter_options.merge(options))
|
|
158
152
|
end
|
|
159
153
|
|
|
160
154
|
def field_presenter_options
|
|
161
|
-
{}
|
|
155
|
+
@field_presenter_options ||= {}
|
|
162
156
|
end
|
|
163
157
|
end
|
|
164
158
|
end
|
|
@@ -15,15 +15,11 @@ module Blacklight
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def collapsed?
|
|
18
|
-
|
|
19
|
-
view_context.should_collapse_facet?(facet_field)
|
|
20
|
-
end
|
|
18
|
+
!active? && facet_field.collapse
|
|
21
19
|
end
|
|
22
20
|
|
|
23
21
|
def active?
|
|
24
|
-
|
|
25
|
-
view_context.facet_field_in_params?(key)
|
|
26
|
-
end
|
|
22
|
+
search_state.filter(facet_field).any?
|
|
27
23
|
end
|
|
28
24
|
|
|
29
25
|
def in_modal?
|
|
@@ -44,20 +40,49 @@ module Blacklight
|
|
|
44
40
|
search_state&.filter(facet_field)&.values || []
|
|
45
41
|
end
|
|
46
42
|
|
|
47
|
-
#
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
Deprecation.silence(Blacklight::FacetsHelperBehavior) do
|
|
51
|
-
view_context.facet_field_id(facet_field)
|
|
52
|
-
end
|
|
43
|
+
# Appease rubocop rules by implementing #each_value
|
|
44
|
+
def each_value(&block)
|
|
45
|
+
values.each(&block)
|
|
53
46
|
end
|
|
54
47
|
|
|
55
48
|
def paginator
|
|
56
49
|
return unless display_facet
|
|
57
50
|
|
|
58
|
-
|
|
59
|
-
|
|
51
|
+
@paginator ||= blacklight_config.facet_paginator_class.new(
|
|
52
|
+
display_facet.items,
|
|
53
|
+
sort: display_facet.sort,
|
|
54
|
+
offset: display_facet.offset,
|
|
55
|
+
prefix: display_facet.prefix,
|
|
56
|
+
limit: facet_limit
|
|
57
|
+
)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
DEFAULT_FACET_LIMIT = 10
|
|
61
|
+
|
|
62
|
+
# Look up facet limit for given facet_field. Will look at config, and
|
|
63
|
+
# if config is 'true' will look up from Solr @response if available. If
|
|
64
|
+
# no limit is available, returns nil. Used from #add_facetting_to_solr
|
|
65
|
+
# to supply f.fieldname.facet.limit values in solr request (no @response
|
|
66
|
+
# available), and used in display (with @response available) to create
|
|
67
|
+
# a facet paginator with the right limit.
|
|
68
|
+
def facet_limit
|
|
69
|
+
return unless facet_field.limit
|
|
70
|
+
|
|
71
|
+
if @display_facet
|
|
72
|
+
limit = @display_facet.limit
|
|
73
|
+
|
|
74
|
+
if limit.nil? # we didn't get or a set a limit, so infer one.
|
|
75
|
+
facet_field.limit if facet_field.limit != true
|
|
76
|
+
elsif limit == -1 # limit -1 is solr-speak for unlimited
|
|
77
|
+
nil
|
|
78
|
+
else
|
|
79
|
+
limit.to_i - 1 # we added 1 to find out if we needed to paginate
|
|
80
|
+
end
|
|
81
|
+
else
|
|
82
|
+
facet_field.limit == true ? DEFAULT_FACET_LIMIT : facet.limit
|
|
60
83
|
end
|
|
61
84
|
end
|
|
85
|
+
|
|
86
|
+
delegate :blacklight_config, to: :search_state
|
|
62
87
|
end
|
|
63
88
|
end
|
|
@@ -7,12 +7,8 @@ module Blacklight
|
|
|
7
7
|
delegate :key, to: :facet_config
|
|
8
8
|
|
|
9
9
|
def initialize(group, facet_item, facet_config, view_context, facet_field, search_state = view_context.search_state)
|
|
10
|
+
super(facet_item, facet_config, view_context, facet_field, search_state)
|
|
10
11
|
@group = group
|
|
11
|
-
@facet_item = facet_item
|
|
12
|
-
@facet_config = facet_config
|
|
13
|
-
@view_context = view_context
|
|
14
|
-
@facet_field = facet_field
|
|
15
|
-
@search_state = search_state
|
|
16
12
|
end
|
|
17
13
|
|
|
18
14
|
##
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
class FacetItemPivotPresenter < FacetItemPresenter
|
|
5
|
+
##
|
|
6
|
+
# Check if the query parameters have the given facet field with the
|
|
7
|
+
# given value.
|
|
8
|
+
def selected?
|
|
9
|
+
search_state.filter(facet_config).include?(facet_item)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def shown?
|
|
13
|
+
selected? || facet_item_presenters.any? { |x| x.try(:shown?) }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def field_label
|
|
17
|
+
facet_field_presenter.label
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def facet_item_presenters
|
|
21
|
+
return to_enum(:facet_item_presenters) unless block_given?
|
|
22
|
+
return [] unless items
|
|
23
|
+
|
|
24
|
+
items.each { |i| yield facet_item_presenter(i) }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def facet_item_presenter(facet_item)
|
|
28
|
+
facet_config.item_presenter.new(facet_item, facet_config, view_context, facet_field, search_state)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
##
|
|
32
|
+
# Get the displayable version of a facet's value
|
|
33
|
+
#
|
|
34
|
+
# @return [String]
|
|
35
|
+
def label
|
|
36
|
+
label_source = facet_item.respond_to?(:label) ? facet_item.label : facet_item
|
|
37
|
+
if facet_config.helper_method
|
|
38
|
+
view_context.public_send(facet_config.helper_method, label_source)
|
|
39
|
+
else
|
|
40
|
+
item_fq = label_source.respond_to?(:fq) ? label_source.fq : {}
|
|
41
|
+
item_fq = item_fq.symbolize_keys
|
|
42
|
+
label_value = facet_config.pivot.map(&:to_sym).map { |k| item_fq[k] }
|
|
43
|
+
if label_source.respond_to?(:field)
|
|
44
|
+
label_value << value
|
|
45
|
+
else
|
|
46
|
+
label_value.unshift value
|
|
47
|
+
end
|
|
48
|
+
label_value.compact.join(" » ")
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def value
|
|
53
|
+
if facet_item.respond_to? :value
|
|
54
|
+
facet_item.value
|
|
55
|
+
else
|
|
56
|
+
facet_item
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -30,9 +30,7 @@ module Blacklight
|
|
|
30
30
|
# Check if the query parameters have the given facet field with the
|
|
31
31
|
# given value.
|
|
32
32
|
def selected?
|
|
33
|
-
|
|
34
|
-
search_state.has_facet? facet_config, value: value
|
|
35
|
-
end
|
|
33
|
+
search_state.filter(facet_config).include?(value)
|
|
36
34
|
end
|
|
37
35
|
|
|
38
36
|
def field_label
|
|
@@ -44,8 +42,6 @@ module Blacklight
|
|
|
44
42
|
#
|
|
45
43
|
# @return [String]
|
|
46
44
|
def label
|
|
47
|
-
return @view_context.facet_display_value(@facet_field, @facet_item) unless @view_context.method(:facet_display_value).owner == Blacklight::FacetsHelperBehavior
|
|
48
|
-
|
|
49
45
|
label_value = if facet_item.respond_to? :label
|
|
50
46
|
facet_item.label
|
|
51
47
|
else
|
|
@@ -62,7 +58,7 @@ module Blacklight
|
|
|
62
58
|
localization_options = facet_config.date == true ? {} : facet_config.date
|
|
63
59
|
I18n.l(Time.zone.parse(label_value), **localization_options)
|
|
64
60
|
else
|
|
65
|
-
label_value
|
|
61
|
+
label_value.to_s
|
|
66
62
|
end
|
|
67
63
|
end
|
|
68
64
|
|
|
@@ -92,9 +88,7 @@ module Blacklight
|
|
|
92
88
|
|
|
93
89
|
# @private
|
|
94
90
|
def remove_href(path = search_state)
|
|
95
|
-
|
|
96
|
-
view_context.search_action_path(path.remove_facet_params(facet_config.key, facet_item))
|
|
97
|
-
end
|
|
91
|
+
view_context.search_action_path(path.filter(facet_config.key).remove(facet_item))
|
|
98
92
|
end
|
|
99
93
|
|
|
100
94
|
# @private
|
|
@@ -1,47 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Blacklight
|
|
3
4
|
class IndexPresenter < DocumentPresenter
|
|
4
|
-
##
|
|
5
|
-
# Render the document index heading. This is used when making a link to a
|
|
6
|
-
# document, where we don't want any HTML markup added from the pipeline.
|
|
7
|
-
#
|
|
8
|
-
# @param [Symbol, Proc, String] field_or_string_or_proc Render the given field or evaluate the proc or render the given string
|
|
9
|
-
# @param [Hash] opts
|
|
10
|
-
def label(field_or_string_or_proc, opts = {})
|
|
11
|
-
config = Configuration::NullField.new
|
|
12
|
-
value = case field_or_string_or_proc
|
|
13
|
-
when Symbol
|
|
14
|
-
config = field_config(field_or_string_or_proc)
|
|
15
|
-
field_presenter(config).values
|
|
16
|
-
when Proc
|
|
17
|
-
Deprecation.warn(self, "calling IndexPresenter.label with a Proc is deprecated. " \
|
|
18
|
-
"First argument must be a symbol. This will be removed in Blacklight 8")
|
|
19
|
-
field_or_string_or_proc.call(document, opts)
|
|
20
|
-
when String
|
|
21
|
-
Deprecation.warn(self, "calling IndexPresenter.label with a String is deprecated. " \
|
|
22
|
-
"First argument must be a symbol. This will be removed in Blacklight 8")
|
|
23
|
-
field_or_string_or_proc
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
value = document.id if value.blank?
|
|
27
|
-
field_value(config, values: Array.wrap(value), except_operations: [Rendering::HelperMethod])
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
deprecation_deprecate label: 'Use #heading'
|
|
31
|
-
|
|
32
5
|
def view_config
|
|
33
|
-
@view_config ||= configuration.view_config(view_context.document_index_view_type)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
private
|
|
37
|
-
|
|
38
|
-
# @return [Hash<String,Configuration::Field>] all the fields for this index view
|
|
39
|
-
def fields
|
|
40
|
-
configuration.index_fields_for(display_type)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def field_config(field)
|
|
44
|
-
configuration.index_fields.fetch(field) { Configuration::NullField.new(field) }
|
|
6
|
+
@view_config ||= configuration.view_config(view_context.document_index_view_type, action_name: view_context.action_name)
|
|
45
7
|
end
|
|
46
8
|
end
|
|
47
9
|
end
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Blacklight
|
|
3
4
|
class JsonPresenter
|
|
4
|
-
include Blacklight::Facet
|
|
5
|
-
|
|
6
5
|
# @param [Solr::Response] response raw solr response.
|
|
7
6
|
# @param [Configuration] blacklight_config the configuration
|
|
8
7
|
def initialize(response, blacklight_config)
|
|
@@ -12,15 +11,18 @@ module Blacklight
|
|
|
12
11
|
|
|
13
12
|
attr_reader :blacklight_config
|
|
14
13
|
|
|
14
|
+
delegate :facet_field_names, :facet_configuration_for_field, to: :blacklight_config
|
|
15
|
+
|
|
15
16
|
def documents
|
|
16
17
|
@response.documents
|
|
17
18
|
end
|
|
18
19
|
|
|
19
20
|
# @return [Array<Blacklight::Solr::Response::Facets::FacetField>]
|
|
20
21
|
def search_facets
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
facet_field_names
|
|
23
|
+
.map { |field| @response.aggregations[facet_configuration_for_field(field).field] }
|
|
24
|
+
.compact
|
|
25
|
+
.select { |display_facet| display_facet.items.present? }
|
|
24
26
|
end
|
|
25
27
|
|
|
26
28
|
# extract the pagination info from the response object
|
|
@@ -5,7 +5,13 @@ module Blacklight
|
|
|
5
5
|
class Join < AbstractStep
|
|
6
6
|
def render
|
|
7
7
|
options = config.separator_options || {}
|
|
8
|
-
|
|
8
|
+
if values.one? || values.none?
|
|
9
|
+
next_step(values.first)
|
|
10
|
+
elsif !html?
|
|
11
|
+
next_step(values.to_sentence(options))
|
|
12
|
+
else
|
|
13
|
+
next_step(values.map { |x| x.html_safe? ? x : html_escape(x) }.to_sentence(options).html_safe)
|
|
14
|
+
end
|
|
9
15
|
end
|
|
10
16
|
|
|
11
17
|
private
|
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
module Blacklight
|
|
4
4
|
module Rendering
|
|
5
5
|
class LinkToFacet < AbstractStep
|
|
6
|
-
extend Deprecation
|
|
7
6
|
def render
|
|
8
|
-
return next_step(values) unless config.link_to_facet
|
|
7
|
+
return next_step(values) unless config.link_to_facet && html?
|
|
9
8
|
|
|
10
9
|
next_step(render_link)
|
|
11
10
|
end
|
|
@@ -31,10 +30,8 @@ module Blacklight
|
|
|
31
30
|
context.search_action_path(facet_params(field, v))
|
|
32
31
|
end
|
|
33
32
|
|
|
34
|
-
def facet_params(field,
|
|
35
|
-
|
|
36
|
-
context.search_state.reset.add_facet_params(field, v)
|
|
37
|
-
end
|
|
33
|
+
def facet_params(field, item)
|
|
34
|
+
context.search_state.reset.filter(field).add(item).params
|
|
38
35
|
end
|
|
39
36
|
end
|
|
40
37
|
end
|
|
@@ -5,7 +5,7 @@ module Blacklight
|
|
|
5
5
|
class Microdata < AbstractStep
|
|
6
6
|
include ActionView::Helpers::TagHelper
|
|
7
7
|
def render
|
|
8
|
-
return next_step(values) unless config.itemprop
|
|
8
|
+
return next_step(values) unless config.itemprop && html?
|
|
9
9
|
|
|
10
10
|
next_step(values.map { |x| itemprop(x, config.itemprop) })
|
|
11
11
|
end
|
|
@@ -1,17 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Blacklight
|
|
3
4
|
class ShowPresenter < DocumentPresenter
|
|
4
5
|
private
|
|
5
6
|
|
|
6
|
-
# @return [Hash<String,Configuration::Field>]
|
|
7
|
-
def fields
|
|
8
|
-
configuration.show_fields_for(display_type)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def field_config(field)
|
|
12
|
-
configuration.show_fields.fetch(field) { Configuration::NullField.new(field) }
|
|
13
|
-
end
|
|
14
|
-
|
|
15
7
|
def field_presenter_options
|
|
16
8
|
{ context: 'show' }
|
|
17
9
|
end
|