blacklight 6.14.0 → 7.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 +5 -5
- data/.gitignore +1 -0
- data/.npmignore +23 -0
- data/.rubocop.yml +40 -16
- data/.rubocop_todo.yml +479 -375
- data/.solr_wrapper.yml +9 -2
- data/.travis.yml +27 -20
- data/Gemfile +3 -1
- data/README.md +22 -5
- data/Rakefile +3 -2
- data/VERSION +1 -1
- data/Vagrantfile +2 -0
- data/app/assets/images/blacklight/list.svg +1 -0
- data/app/assets/images/blacklight/search.svg +1 -0
- data/app/assets/javascripts/blacklight/blacklight.js +497 -57
- data/app/assets/stylesheets/blacklight/_balanced_list.scss +7 -12
- data/app/assets/stylesheets/blacklight/_blacklight_base.scss +18 -15
- data/app/assets/stylesheets/blacklight/_bookmark.scss +1 -13
- data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +27 -0
- data/app/assets/stylesheets/blacklight/_constraints.scss +17 -25
- data/app/assets/stylesheets/blacklight/_controls.scss +8 -16
- data/app/assets/stylesheets/blacklight/_facets.scss +64 -93
- data/app/assets/stylesheets/blacklight/_header.scss +35 -48
- data/app/assets/stylesheets/blacklight/_icons.scss +35 -0
- data/app/assets/stylesheets/blacklight/_layout.scss +0 -10
- data/app/assets/stylesheets/blacklight/_mixins.scss +15 -0
- data/app/assets/stylesheets/blacklight/_modal.scss +9 -17
- data/app/assets/stylesheets/blacklight/_pagination.scss +2 -17
- data/app/assets/stylesheets/blacklight/_search_form.scss +7 -0
- data/app/assets/stylesheets/blacklight/_search_history.scss +5 -13
- data/app/assets/stylesheets/blacklight/_search_results.scss +9 -8
- data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +1 -2
- data/app/assets/stylesheets/blacklight/blacklight.scss +1 -1
- data/app/builders/blacklight/action_builder.rb +57 -0
- data/app/controllers/bookmarks_controller.rb +2 -2
- data/app/controllers/catalog_controller.rb +2 -2
- data/app/controllers/concerns/blacklight/base.rb +0 -33
- data/app/controllers/concerns/blacklight/bookmarks.rb +36 -33
- data/app/controllers/concerns/blacklight/catalog.rb +266 -210
- data/app/controllers/concerns/blacklight/controller.rb +111 -126
- data/app/controllers/concerns/blacklight/default_component_configuration.rb +12 -43
- data/app/controllers/concerns/blacklight/facet.rb +3 -0
- data/app/controllers/concerns/blacklight/search_context.rb +16 -14
- data/app/controllers/concerns/blacklight/search_fields.rb +4 -14
- data/app/controllers/concerns/blacklight/search_history.rb +1 -6
- data/app/controllers/concerns/blacklight/token_based_user.rb +24 -9
- data/app/helpers/blacklight/blacklight_helper_behavior.rb +39 -119
- data/app/helpers/blacklight/catalog_helper_behavior.rb +94 -88
- data/app/helpers/blacklight/component_helper_behavior.rb +21 -19
- data/app/helpers/blacklight/configuration_helper_behavior.rb +30 -57
- data/app/helpers/blacklight/facets_helper_behavior.rb +55 -51
- data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +9 -11
- data/app/helpers/blacklight/icon_helper_behavior.rb +18 -0
- data/app/helpers/blacklight/layout_helper_behavior.rb +3 -3
- data/app/helpers/blacklight/render_constraints_helper_behavior.rb +8 -6
- data/app/helpers/blacklight/render_partials_helper_behavior.rb +195 -0
- data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +19 -11
- data/app/helpers/blacklight/suggest_helper_behavior.rb +1 -0
- data/app/helpers/blacklight/url_helper_behavior.rb +50 -41
- data/app/{assets/javascripts → javascript}/blacklight/autocomplete.js +3 -2
- data/app/javascript/blacklight/bookmark_toggle.js +25 -0
- data/app/javascript/blacklight/checkbox_submit.js +134 -0
- data/app/{assets/javascripts → javascript}/blacklight/collapsable.js +1 -1
- data/app/{assets/javascripts → javascript}/blacklight/core.js +10 -8
- data/app/{assets/javascripts → javascript}/blacklight/facet_load.js +6 -6
- data/app/{assets/javascripts/blacklight/ajax_modal.js → javascript/blacklight/modal.js} +62 -64
- data/app/{assets/javascripts → javascript}/blacklight/search_context.js +10 -3
- data/app/models/blacklight/facet_paginator.rb +3 -3
- data/app/models/blacklight/icon.rb +56 -0
- data/app/models/blacklight/solr/facet_paginator.rb +3 -3
- data/app/models/blacklight/suggest_search.rb +4 -15
- data/app/models/bookmark.rb +5 -10
- data/app/models/concerns/blacklight/configurable.rb +13 -13
- data/app/models/concerns/blacklight/document/active_model_shim.rb +13 -11
- data/app/models/concerns/blacklight/document/cache_key.rb +1 -1
- data/app/models/concerns/blacklight/document/dublin_core.rb +2 -2
- data/app/models/concerns/blacklight/document/email.rb +1 -1
- data/app/models/concerns/blacklight/document/extensions.rb +5 -5
- data/app/models/concerns/blacklight/document/semantic_fields.rb +9 -9
- data/app/models/concerns/blacklight/document/sms.rb +1 -1
- data/app/models/concerns/blacklight/document.rb +26 -40
- data/app/models/concerns/blacklight/solr/document.rb +8 -8
- data/app/models/concerns/blacklight/suggest/response.rb +5 -3
- data/app/models/concerns/blacklight/user.rb +7 -6
- data/app/models/record_mailer.rb +5 -6
- data/app/models/search.rb +5 -7
- data/app/presenters/blacklight/document_presenter.rb +25 -140
- data/app/presenters/blacklight/field_presenter.rb +7 -5
- data/app/presenters/blacklight/index_presenter.rb +41 -58
- data/app/presenters/blacklight/json_presenter.rb +10 -14
- data/app/presenters/blacklight/link_alternate_presenter.rb +3 -1
- data/app/presenters/blacklight/rendering/abstract_step.rb +7 -5
- data/app/presenters/blacklight/rendering/helper_method.rb +10 -8
- data/app/presenters/blacklight/rendering/join.rb +5 -3
- data/app/presenters/blacklight/rendering/link_to_facet.rb +23 -19
- data/app/presenters/blacklight/rendering/microdata.rb +6 -3
- data/app/presenters/blacklight/rendering/pipeline.rb +7 -5
- data/app/presenters/blacklight/rendering/terminator.rb +2 -0
- data/app/presenters/blacklight/search_bar_presenter.rb +39 -0
- data/app/presenters/blacklight/show_presenter.rb +26 -63
- data/app/presenters/blacklight/thumbnail_presenter.rb +74 -0
- data/app/services/blacklight/document_factory.rb +13 -0
- data/app/services/blacklight/field_retriever.rb +26 -24
- data/app/services/blacklight/search_service.rb +152 -0
- data/app/values/blacklight/types.rb +31 -0
- data/app/views/blacklight/nav/_bookmark.html.erb +2 -2
- data/app/views/blacklight/nav/_search_history.html.erb +1 -1
- data/app/views/bookmarks/_tools.html.erb +2 -2
- data/app/views/bookmarks/index.html.erb +12 -13
- data/app/views/catalog/_bookmark_control.html.erb +26 -10
- data/app/views/catalog/_citation.html.erb +4 -4
- data/app/views/catalog/_constraints.html.erb +6 -7
- data/app/views/catalog/_constraints_element.html.erb +6 -6
- data/app/views/catalog/_did_you_mean.html.erb +1 -1
- data/app/views/catalog/{_document_default.atom.builder → _document.atom.builder} +19 -18
- data/app/views/catalog/_document.html.erb +5 -3
- data/app/views/catalog/{_document_default.rss.builder → _document.rss.builder} +2 -0
- data/app/views/catalog/_document_action.html.erb +2 -1
- data/app/views/catalog/_email_form.html.erb +8 -4
- data/app/views/catalog/_facet_index_navigation.html.erb +5 -4
- data/app/views/catalog/_facet_layout.html.erb +6 -10
- data/app/views/catalog/_facet_limit.html.erb +3 -2
- data/app/views/catalog/_facet_pagination.html.erb +8 -8
- data/app/views/catalog/_facet_pivot.html.erb +2 -2
- data/app/views/catalog/_facets.html.erb +9 -12
- data/app/views/catalog/_field.json.jbuilder +10 -0
- data/app/views/catalog/{_group_default.html.erb → _group.html.erb} +1 -1
- data/app/views/catalog/_home_text.html.erb +32 -36
- data/app/views/catalog/_index.html.erb +10 -0
- data/app/views/catalog/{_index_header_default.html.erb → _index_header.html.erb} +3 -3
- data/app/views/catalog/_per_page_widget.html.erb +6 -7
- data/app/views/catalog/_previous_next_doc.html.erb +6 -14
- data/app/views/catalog/_results_pagination.html.erb +2 -2
- data/app/views/catalog/_search_form.html.erb +12 -8
- data/app/views/catalog/_search_header.html.erb +0 -3
- data/app/views/catalog/_search_results.html.erb +6 -2
- data/app/views/catalog/_show.html.erb +8 -0
- data/app/views/catalog/_show_main_content.html.erb +4 -4
- data/app/views/catalog/_show_more_like_this.html.erb +1 -1
- data/app/views/catalog/_show_sidebar.html.erb +3 -3
- data/app/views/catalog/_show_tools.html.erb +10 -12
- data/app/views/catalog/_sms_form.html.erb +8 -4
- data/app/views/catalog/_sort_and_per_page.html.erb +3 -3
- data/app/views/catalog/_sort_widget.html.erb +7 -7
- data/app/views/catalog/_thumbnail.html.erb +5 -0
- data/app/views/catalog/_view_type_group.html.erb +2 -2
- data/app/views/catalog/_zero_results.html.erb +1 -1
- data/app/views/catalog/citation.js.erb +4 -2
- data/app/views/catalog/email.html.erb +5 -3
- data/app/views/catalog/email_success.html.erb +12 -8
- data/app/views/catalog/facet.html.erb +10 -8
- data/app/views/catalog/facet.json.jbuilder +2 -0
- data/app/views/catalog/index.atom.builder +13 -16
- data/app/views/catalog/index.html.erb +9 -11
- data/app/views/catalog/index.json.jbuilder +84 -3
- data/app/views/catalog/index.rss.builder +7 -5
- data/app/views/catalog/opensearch.xml.builder +12 -10
- data/app/views/catalog/show.html.erb +11 -6
- data/app/views/catalog/show.json.jbuilder +21 -0
- data/app/views/catalog/sms.html.erb +3 -1
- data/app/views/catalog/sms_success.html.erb +12 -8
- data/app/views/kaminari/blacklight/_first_page.html.erb +2 -2
- data/app/views/kaminari/blacklight/_gap.html.erb +2 -2
- data/app/views/kaminari/blacklight/_last_page.html.erb +2 -2
- data/app/views/kaminari/blacklight/_next_page.html.erb +5 -5
- data/app/views/kaminari/blacklight/_page.html.erb +5 -3
- data/app/views/kaminari/blacklight/_prev_page.html.erb +4 -4
- data/app/views/kaminari/blacklight_compact/_paginator.html.erb +4 -4
- data/app/views/layouts/blacklight/base.html.erb +35 -0
- data/app/views/layouts/blacklight.html.erb +14 -41
- data/app/views/layouts/catalog_result.html.erb +11 -0
- data/app/views/search_history/index.html.erb +16 -21
- data/app/views/shared/_header_navbar.html.erb +8 -13
- data/app/views/shared/_modal.html.erb +6 -0
- data/app/views/shared/_user_util_links.html.erb +22 -0
- data/blacklight.gemspec +10 -11
- data/config/i18n-tasks.yml +17 -0
- data/config/locales/blacklight.de.yml +71 -82
- data/config/locales/blacklight.en.yml +15 -27
- data/config/locales/blacklight.es.yml +14 -26
- data/config/locales/blacklight.fr.yml +16 -33
- data/config/locales/blacklight.hu.yml +212 -0
- data/config/locales/blacklight.it.yml +15 -26
- data/config/locales/blacklight.nl.yml +212 -0
- data/config/locales/blacklight.pt-BR.yml +24 -29
- data/config/locales/blacklight.sq.yml +4 -28
- data/config/locales/blacklight.zh.yml +3 -25
- data/config/routes.rb +2 -10
- data/db/migrate/20140202020202_create_bookmarks.rb +0 -1
- data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -1
- data/lib/blacklight/abstract_repository.rb +22 -10
- data/lib/blacklight/configuration/context.rb +12 -1
- data/lib/blacklight/configuration/facet_field.rb +16 -9
- data/lib/blacklight/configuration/field.rb +32 -3
- data/lib/blacklight/configuration/fields.rb +61 -58
- data/lib/blacklight/configuration/null_field.rb +2 -0
- data/lib/blacklight/configuration/search_field.rb +2 -2
- data/lib/blacklight/configuration/sort_field.rb +2 -2
- data/lib/blacklight/configuration/view_config.rb +4 -0
- data/lib/blacklight/configuration.rb +101 -88
- data/lib/blacklight/engine.rb +11 -7
- data/lib/blacklight/exceptions.rb +4 -7
- data/lib/blacklight/{utils.rb → nested_open_struct_with_hash_access.rb} +9 -81
- data/lib/blacklight/open_struct_with_hash_access.rb +49 -0
- data/lib/blacklight/parameters.rb +1 -1
- data/lib/blacklight/routes/exportable.rb +1 -3
- data/lib/blacklight/routes/searchable.rb +3 -3
- data/lib/blacklight/runtime_registry.rb +2 -0
- data/lib/blacklight/search_builder.rb +28 -35
- data/lib/blacklight/search_state.rb +10 -8
- data/lib/blacklight/solr/repository.rb +40 -6
- data/lib/blacklight/solr/request.rb +1 -1
- data/lib/blacklight/solr/response/facets.rb +29 -31
- data/lib/blacklight/solr/response/group.rb +3 -3
- data/lib/blacklight/solr/response/group_response.rb +1 -1
- data/lib/blacklight/solr/response/more_like_this.rb +2 -2
- data/lib/blacklight/solr/response/response.rb +2 -2
- data/lib/blacklight/solr/response/spelling.rb +4 -3
- data/lib/blacklight/solr/response.rb +29 -30
- data/lib/blacklight/solr/search_builder_behavior.rb +25 -29
- data/lib/blacklight/version.rb +1 -1
- data/lib/blacklight.rb +10 -8
- data/lib/generators/blacklight/assets_generator.rb +18 -12
- data/lib/generators/blacklight/controller_generator.rb +4 -5
- data/lib/generators/blacklight/document_generator.rb +1 -1
- data/lib/generators/blacklight/install_generator.rb +18 -28
- data/lib/generators/blacklight/search_builder_generator.rb +1 -1
- data/lib/generators/blacklight/{solr5_generator.rb → solr_generator.rb} +12 -6
- data/lib/generators/blacklight/templates/.solr_wrapper.yml +5 -0
- data/lib/generators/blacklight/templates/alternate_controller.rb +4 -4
- data/lib/generators/blacklight/templates/blacklight.scss +0 -2
- data/lib/generators/blacklight/templates/catalog_controller.rb +59 -49
- data/lib/generators/blacklight/templates/config/blacklight.yml +1 -13
- data/lib/generators/blacklight/templates/solr/conf/schema.xml +388 -0
- data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +195 -0
- data/lib/generators/blacklight/test_support_generator.rb +10 -10
- data/lib/generators/blacklight/user_generator.rb +5 -6
- data/lib/railties/blacklight.rake +17 -21
- data/package-lock.json +2195 -0
- data/package.json +29 -0
- data/spec/controllers/alternate_controller_spec.rb +5 -4
- data/spec/controllers/application_controller_spec.rb +1 -5
- data/spec/controllers/blacklight/base_spec.rb +6 -3
- data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +11 -7
- data/spec/controllers/blacklight/facet_spec.rb +1 -2
- data/spec/controllers/blacklight/search_fields_spec.rb +25 -34
- data/spec/controllers/bookmarks_controller_spec.rb +46 -11
- data/spec/controllers/catalog_controller_spec.rb +334 -161
- data/spec/controllers/search_history_controller_spec.rb +6 -6
- data/spec/features/alternate_controller_spec.rb +4 -4
- data/spec/features/autocomplete_spec.rb +4 -2
- data/spec/features/bookmarks_spec.rb +10 -10
- data/spec/features/did_you_mean_spec.rb +7 -12
- data/spec/features/facets_spec.rb +29 -17
- data/spec/features/record_view_spec.rb +12 -18
- data/spec/features/search_context_spec.rb +6 -7
- data/spec/features/search_crawler_spec.rb +3 -5
- data/spec/features/search_filters_spec.rb +80 -80
- data/spec/features/search_formats_spec.rb +1 -1
- data/spec/features/search_history_spec.rb +6 -29
- data/spec/features/search_pagination_spec.rb +4 -2
- data/spec/features/search_results_spec.rb +14 -12
- data/spec/features/search_sort_spec.rb +2 -2
- data/spec/features/search_spec.rb +8 -9
- data/spec/features/sitelinks_search_box.rb +4 -4
- data/{solr → spec/fixtures}/sample_solr_documents.yml +688 -688
- data/spec/helpers/{configuration_helper_spec.rb → blacklight/configuration_helper_behavior_spec.rb} +97 -92
- data/spec/helpers/{facets_helper_spec.rb → blacklight/facets_helper_behavior_spec.rb} +72 -67
- data/spec/helpers/{hash_as_hidden_fields_spec.rb → blacklight/hash_as_hidden_fields_behavior_spec.rb} +2 -2
- data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +10 -0
- data/spec/helpers/{layout_helper_spec.rb → blacklight/layout_helper_behavior_spec.rb} +5 -5
- data/spec/helpers/{render_constraints_helper_spec.rb → blacklight/render_constraints_helper_behavior_spec.rb} +10 -6
- data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +92 -0
- data/spec/helpers/{search_history_constraints_helper_spec.rb → blacklight/search_history_constraints_helper_behavior_spec.rb} +29 -30
- data/spec/helpers/{suggest_helper_spec.rb → blacklight/suggest_helper_behavior_spec.rb} +9 -2
- data/spec/helpers/{url_helper_spec.rb → blacklight/url_helper_behavior_spec.rb} +56 -54
- data/spec/helpers/blacklight_helper_spec.rb +65 -150
- data/spec/helpers/catalog_helper_spec.rb +80 -96
- data/spec/i18n_spec.rb +18 -0
- data/spec/integration/generators/blacklight/{solr5_generator_spec.rb → solr_generator_spec.rb} +21 -13
- data/spec/lib/blacklight/configuration/facet_field_spec.rb +13 -0
- data/spec/lib/blacklight/configuration/field_spec.rb +15 -0
- data/spec/lib/blacklight/nested_open_struct_with_hash_access_spec.rb +17 -0
- data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +148 -0
- data/spec/lib/blacklight/parameters_spec.rb +4 -2
- data/spec/lib/blacklight/search_state_spec.rb +53 -36
- data/spec/lib/blacklight_spec.rb +14 -15
- data/spec/lib/tasks/blacklight_task_spec.rb +4 -6
- data/spec/models/blacklight/configurable_spec.rb +24 -27
- data/spec/models/blacklight/configuration/context_spec.rb +9 -10
- data/spec/models/blacklight/configuration_spec.rb +248 -223
- data/spec/models/blacklight/document/active_model_shim_spec.rb +15 -6
- data/spec/models/blacklight/document/cache_key_spec.rb +9 -2
- data/spec/models/blacklight/document/dublin_core_spec.rb +17 -20
- data/spec/models/blacklight/document/email_spec.rb +10 -10
- data/spec/models/blacklight/document/sms_spec.rb +10 -10
- data/spec/models/blacklight/document_spec.rb +10 -22
- data/spec/models/blacklight/facet_paginator_spec.rb +40 -30
- data/spec/models/blacklight/icon_spec.rb +44 -0
- data/spec/models/blacklight/search_builder_spec.rb +41 -26
- data/spec/models/blacklight/solr/document_spec.rb +224 -216
- data/spec/models/blacklight/solr/facet_paginator_spec.rb +6 -4
- data/spec/models/blacklight/solr/repository_spec.rb +61 -46
- data/spec/models/blacklight/solr/request_spec.rb +17 -18
- data/spec/models/blacklight/solr/response/facets_spec.rb +58 -58
- data/spec/models/blacklight/solr/response/group_response_spec.rb +16 -22
- data/spec/models/blacklight/solr/response/group_spec.rb +18 -25
- data/spec/models/blacklight/solr/response_spec.rb +56 -55
- data/spec/models/blacklight/solr/search_builder_spec.rb +150 -164
- data/spec/models/blacklight/suggest/response_spec.rb +6 -4
- data/spec/models/blacklight/suggest_search_spec.rb +9 -16
- data/spec/models/blacklight/user_spec.rb +9 -11
- data/spec/models/bookmark_spec.rb +7 -6
- data/spec/models/record_mailer_spec.rb +23 -21
- data/spec/models/search_spec.rb +19 -18
- data/spec/models/solr_document_spec.rb +33 -5
- data/spec/presenters/blacklight/document_presenter_spec.rb +86 -0
- data/spec/presenters/blacklight/index_presenter_spec.rb +186 -0
- data/spec/presenters/blacklight/json_presenter_spec.rb +59 -0
- data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -0
- data/spec/presenters/blacklight/search_bar_presenter_spec.rb +79 -0
- data/spec/presenters/blacklight/show_presenter_spec.rb +333 -0
- data/spec/presenters/pipeline_spec.rb +18 -11
- data/spec/presenters/thumbnail_presenter_spec.rb +174 -0
- data/spec/routing/catalog_routing_spec.rb +13 -15
- data/spec/services/blacklight/search_service_spec.rb +488 -0
- data/spec/spec_helper.rb +20 -19
- data/spec/support/features/session_helpers.rb +4 -4
- data/spec/support/features.rb +1 -1
- data/spec/test_app_templates/Gemfile.extra +2 -4
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +12 -13
- data/spec/views/catalog/_constraints.html.erb_spec.rb +3 -6
- data/spec/views/catalog/_constraints_element.html.erb_spec.rb +17 -13
- data/spec/views/catalog/_document.html.erb_spec.rb +11 -11
- data/spec/views/catalog/_document_list.html.erb_spec.rb +2 -1
- data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +5 -5
- data/spec/views/catalog/_facet_layout.html.erb_spec.rb +6 -6
- data/spec/views/catalog/_facets.html.erb_spec.rb +10 -12
- data/spec/views/catalog/{_index_default.erb_spec.rb → _index.html.erb_spec.rb} +14 -15
- data/spec/views/catalog/{_index_header_default.html.erb_spec.rb → _index_header.html.erb_spec.rb} +6 -9
- data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +7 -30
- data/spec/views/catalog/_search_header.erb_spec.rb +1 -3
- data/spec/views/catalog/{_show_default.erb_spec.rb → _show.html.erb_spec.rb} +13 -14
- data/spec/views/catalog/_show_sidebar.erb_spec.rb +6 -9
- data/spec/views/catalog/_show_tools.html.erb_spec.rb +5 -5
- data/spec/views/catalog/_sort_and_per_page.html.erb_spec.rb +1 -2
- data/spec/views/catalog/_sort_widget.html.erb_spec.rb +3 -1
- data/spec/views/catalog/{_thumbnail_default.erb_spec.rb → _thumbnail.html.erb_spec.rb} +7 -9
- data/spec/views/catalog/_view_type_group.html.erb_spec.rb +12 -10
- data/spec/views/catalog/email_success.html.erb_spec.rb +8 -0
- data/spec/views/catalog/facet.html.erb_spec.rb +4 -3
- data/spec/views/catalog/facet.json.jbuilder_spec.rb +3 -2
- data/spec/views/catalog/index.atom.builder_spec.rb +11 -6
- data/spec/views/catalog/index.html.erb_spec.rb +6 -8
- data/spec/views/catalog/index.json.jbuilder_spec.rb +119 -26
- data/spec/views/catalog/opensearch.xml.builder_spec.rb +1 -1
- data/spec/views/catalog/show.html.erb_spec.rb +8 -8
- data/spec/views/catalog/show.json.jbuilder_spec.rb +40 -0
- data/spec/views/catalog/sms_success.html.erb_spec.rb +8 -0
- data/spec/views/{_user_util_links.html.erb_spec.rb → shared/_user_util_links.html.erb_spec.rb} +4 -7
- data/tasks/blacklight.rake +10 -8
- data/template.demo.rb +3 -11
- metadata +188 -189
- data/app/assets/javascripts/blacklight/autofocus.js +0 -16
- data/app/assets/javascripts/blacklight/bookmark_toggle.js +0 -23
- data/app/assets/javascripts/blacklight/checkbox_submit.js +0 -135
- data/app/controllers/concerns/blacklight/request_builders.rb +0 -77
- data/app/controllers/concerns/blacklight/saved_searches.rb +0 -70
- data/app/controllers/concerns/blacklight/search_helper.rb +0 -155
- data/app/controllers/concerns/blacklight/suggest.rb +0 -25
- data/app/controllers/saved_searches_controller.rb +0 -4
- data/app/controllers/suggest_controller.rb +0 -4
- data/app/helpers/blacklight/deprecated_url_helper_behavior.rb +0 -57
- data/app/helpers/blacklight/render_partials_helper.rb +0 -205
- data/app/helpers/blacklight_configuration_helper.rb +0 -4
- data/app/helpers/blacklight_url_helper.rb +0 -4
- data/app/helpers/component_helper.rb +0 -4
- data/app/helpers/facets_helper.rb +0 -4
- data/app/helpers/hash_as_hidden_fields_helper.rb +0 -4
- data/app/helpers/layout_helper.rb +0 -4
- data/app/helpers/render_constraints_helper.rb +0 -4
- data/app/helpers/search_history_constraints_helper.rb +0 -4
- data/app/helpers/suggest_helper.rb +0 -4
- data/app/models/concerns/blacklight/solr/document/more_like_this.rb +0 -6
- data/app/views/_user_util_links.html.erb +0 -26
- data/app/views/blacklight/nav/_saved_searches.html.erb +0 -1
- data/app/views/catalog/_index_default.html.erb +0 -12
- data/app/views/catalog/_show_default.html.erb +0 -10
- data/app/views/catalog/_thumbnail_default.html.erb +0 -5
- data/app/views/saved_searches/index.html.erb +0 -32
- data/app/views/shared/_ajax_modal.html.erb +0 -6
- data/lib/generators/blacklight/solr4_generator.rb +0 -31
- data/lib/generators/blacklight/templates/config/jetty.yml +0 -13
- data/solr/conf/schema.xml +0 -629
- data/solr/conf/solrconfig.xml +0 -411
- data/spec/controllers/blacklight/search_helper_spec.rb +0 -470
- data/spec/controllers/saved_searches_controller_spec.rb +0 -32
- data/spec/controllers/suggest_controller_spec.rb +0 -17
- data/spec/features/saved_searches_spec.rb +0 -47
- data/spec/helpers/deprecated_url_helper_behavior_spec.rb +0 -101
- data/spec/lib/blacklight/utils_spec.rb +0 -167
- data/spec/models/blacklight/solr/document/more_like_this_spec.rb +0 -18
- data/spec/presenters/document_presenter_spec.rb +0 -438
- data/spec/presenters/index_presenter_spec.rb +0 -173
- data/spec/presenters/show_presenter_spec.rb +0 -313
- data/spec/support/backport_test.rb +0 -14
- /data/app/views/catalog/{_show_header_default.html.erb → _show_header.html.erb} +0 -0
- /data/app/views/{_flash_msg.html.erb → shared/_flash_msg.html.erb} +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/_rest_managed.json +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/admin-extra.html +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/elevate.xml +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/mapping-ISOLatin1Accent.txt +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/protwords.txt +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/scripts.conf +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/spellings.txt +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords.txt +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords_en.txt +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/synonyms.txt +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example.xsl +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_atom.xsl +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_rss.xsl +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/luke.xsl +0 -0
|
@@ -3,34 +3,39 @@
|
|
|
3
3
|
# as this module is mixed-in to the application controller in the hosting app on installation.
|
|
4
4
|
module Blacklight::Controller
|
|
5
5
|
extend ActiveSupport::Concern
|
|
6
|
-
extend Deprecation
|
|
7
|
-
self.deprecation_horizon = 'blacklight 7.x'
|
|
8
6
|
|
|
9
7
|
included do
|
|
10
8
|
include Blacklight::SearchFields
|
|
11
|
-
helper Blacklight::SearchFields
|
|
9
|
+
helper Blacklight::SearchFields if respond_to? :helper
|
|
12
10
|
|
|
13
11
|
include ActiveSupport::Callbacks
|
|
14
12
|
|
|
15
13
|
# now in application.rb file under config.filter_parameters
|
|
16
14
|
# filter_parameter_logging :password, :password_confirmation
|
|
17
|
-
helper_method :current_user_session, :current_user, :current_or_guest_user
|
|
18
|
-
after_action :discard_flash_if_xhr
|
|
19
15
|
|
|
20
16
|
# handle basic authorization exception with #access_denied
|
|
21
|
-
rescue_from Blacklight::Exceptions::AccessDenied, :
|
|
17
|
+
rescue_from Blacklight::Exceptions::AccessDenied, with: :access_denied
|
|
22
18
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
helper_method :blacklight_config, :blacklight_configuration_context
|
|
26
|
-
helper_method :search_action_url, :search_action_path, :search_facet_url, :search_facet_path
|
|
27
|
-
helper_method :search_state
|
|
19
|
+
if respond_to? :helper_method
|
|
20
|
+
helper_method :current_user_session, :current_user, :current_or_guest_user
|
|
28
21
|
|
|
29
|
-
|
|
22
|
+
# extra head content
|
|
23
|
+
helper_method :has_user_authentication_provider?
|
|
24
|
+
helper_method :blacklight_config, :blacklight_configuration_context
|
|
25
|
+
helper_method :search_action_url, :search_action_path, :search_facet_path
|
|
26
|
+
helper_method :search_state
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Which class to use for the search state. You can subclass SearchState if you
|
|
30
30
|
# want to override any of the methods (e.g. SearchState#url_for_document)
|
|
31
31
|
class_attribute :search_state_class
|
|
32
32
|
self.search_state_class = Blacklight::SearchState
|
|
33
33
|
|
|
34
|
+
# Which class to use for the search service. You can subclass SearchService if you
|
|
35
|
+
# want to override any of the methods (e.g. SearchService#fetch)
|
|
36
|
+
class_attribute :search_service_class
|
|
37
|
+
self.search_service_class = Blacklight::SearchService
|
|
38
|
+
|
|
34
39
|
# This callback runs when a user first logs in
|
|
35
40
|
|
|
36
41
|
define_callbacks :logging_in_user
|
|
@@ -43,140 +48,120 @@ module Blacklight::Controller
|
|
|
43
48
|
|
|
44
49
|
delegate :blacklight_config, to: :default_catalog_controller
|
|
45
50
|
|
|
46
|
-
|
|
51
|
+
private
|
|
47
52
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
+
##
|
|
54
|
+
# Context in which to evaluate blacklight configuration conditionals
|
|
55
|
+
def blacklight_configuration_context
|
|
56
|
+
@blacklight_configuration_context ||= Blacklight::Configuration::Context.new(self)
|
|
57
|
+
end
|
|
53
58
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
59
|
+
##
|
|
60
|
+
# Determine whether to render the bookmarks control
|
|
61
|
+
# (Needs to be available globally, as it is used in the navbar)
|
|
62
|
+
def render_bookmarks_control?
|
|
63
|
+
has_user_authentication_provider? && current_or_guest_user.present?
|
|
64
|
+
end
|
|
60
65
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
has_user_authentication_provider? and current_user
|
|
66
|
-
end
|
|
66
|
+
# @return [Blacklight::SearchState] a memoized instance of the parameter state.
|
|
67
|
+
def search_state
|
|
68
|
+
@search_state ||= search_state_class.new(params, blacklight_config, self)
|
|
69
|
+
end
|
|
67
70
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
"Invoking it will 2 arguments is deprecated and will be removed in Blacklight 7.")
|
|
76
|
-
search_state_class.new(params, blacklight_config)
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
71
|
+
# Default route to the search action (used e.g. in global partials). Override this method
|
|
72
|
+
# in a controller or in your ApplicationController to introduce custom logic for choosing
|
|
73
|
+
# which action the search form should use
|
|
74
|
+
def search_action_url options = {}
|
|
75
|
+
# Rails 4.2 deprecated url helpers accepting string keys for 'controller' or 'action'
|
|
76
|
+
search_catalog_url(options.except(:controller, :action))
|
|
77
|
+
end
|
|
80
78
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
def search_action_url options = {}
|
|
85
|
-
# Rails 4.2 deprecated url helpers accepting string keys for 'controller' or 'action'
|
|
86
|
-
search_catalog_url(options.except(:controller, :action))
|
|
79
|
+
def search_action_path *args
|
|
80
|
+
if args.first.is_a? Hash
|
|
81
|
+
args.first[:only_path] = true if args.first[:only_path].nil?
|
|
87
82
|
end
|
|
88
83
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
args.first[:only_path] = true
|
|
92
|
-
end
|
|
84
|
+
search_action_url(*args)
|
|
85
|
+
end
|
|
93
86
|
|
|
94
|
-
|
|
95
|
-
|
|
87
|
+
def search_facet_path(options = {})
|
|
88
|
+
opts = search_state
|
|
89
|
+
.to_h
|
|
90
|
+
.merge(action: "facet", only_path: true)
|
|
91
|
+
.merge(options)
|
|
92
|
+
.except(:page)
|
|
93
|
+
url_for opts
|
|
94
|
+
end
|
|
96
95
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
deprecation_deprecate search_facet_url: 'Use search_facet_path instead.'
|
|
96
|
+
# Returns a list of Searches from the ids in the user's history.
|
|
97
|
+
def searches_from_history
|
|
98
|
+
session[:history].blank? ? ::Search.none : ::Search.where(id: session[:history]).order("updated_at desc")
|
|
99
|
+
end
|
|
102
100
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
101
|
+
# Should be provided by authentication provider
|
|
102
|
+
# def current_user
|
|
103
|
+
# end
|
|
104
|
+
# def current_or_guest_user
|
|
105
|
+
# end
|
|
106
|
+
|
|
107
|
+
# Here's a stub implementation we'll add if it isn't provided for us
|
|
108
|
+
def current_or_guest_user
|
|
109
|
+
if defined? super
|
|
110
|
+
super
|
|
111
|
+
elsif has_user_authentication_provider?
|
|
112
|
+
current_user
|
|
107
113
|
end
|
|
114
|
+
end
|
|
115
|
+
alias blacklight_current_or_guest_user current_or_guest_user
|
|
108
116
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
117
|
+
##
|
|
118
|
+
#
|
|
119
|
+
#
|
|
120
|
+
def has_user_authentication_provider?
|
|
121
|
+
respond_to? :current_user
|
|
122
|
+
end
|
|
113
123
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
# def current_or_guest_user
|
|
118
|
-
# end
|
|
119
|
-
|
|
120
|
-
# Here's a stub implementation we'll add if it isn't provided for us
|
|
121
|
-
def current_or_guest_user
|
|
122
|
-
if defined? super
|
|
123
|
-
super
|
|
124
|
-
elsif has_user_authentication_provider?
|
|
125
|
-
current_user
|
|
126
|
-
end
|
|
127
|
-
end
|
|
128
|
-
alias blacklight_current_or_guest_user current_or_guest_user
|
|
124
|
+
def require_user_authentication_provider
|
|
125
|
+
raise ActionController::RoutingError, 'Not Found' unless has_user_authentication_provider?
|
|
126
|
+
end
|
|
129
127
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
flash.discard if request.xhr?
|
|
135
|
-
end
|
|
128
|
+
##
|
|
129
|
+
# When a user logs in, transfer any saved searches or bookmarks to the current_user
|
|
130
|
+
def transfer_guest_user_actions_to_current_user
|
|
131
|
+
return unless respond_to?(:current_user) && respond_to?(:guest_user) && current_user && guest_user
|
|
136
132
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
#
|
|
140
|
-
def has_user_authentication_provider?
|
|
141
|
-
respond_to? :current_user
|
|
142
|
-
end
|
|
133
|
+
current_user_searches = current_user.searches.pluck(:query_params)
|
|
134
|
+
current_user_bookmarks = current_user.bookmarks.pluck(:document_id)
|
|
143
135
|
|
|
144
|
-
|
|
145
|
-
|
|
136
|
+
guest_user.searches.reject { |s| current_user_searches.include?(s.query_params) }.each do |s|
|
|
137
|
+
current_user.searches << s
|
|
138
|
+
s.save!
|
|
146
139
|
end
|
|
147
140
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
return unless respond_to? :current_user and respond_to? :guest_user and current_user and guest_user
|
|
152
|
-
current_user_searches = current_user.searches.pluck(:query_params)
|
|
153
|
-
current_user_bookmarks = current_user.bookmarks.pluck(:document_id)
|
|
154
|
-
|
|
155
|
-
guest_user.searches.reject { |s| current_user_searches.include?(s.query_params)}.each do |s|
|
|
156
|
-
current_user.searches << s
|
|
157
|
-
s.save!
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
guest_user.bookmarks.reject { |b| current_user_bookmarks.include?(b.document_id)}.each do |b|
|
|
161
|
-
current_user.bookmarks << b
|
|
162
|
-
b.save!
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
# let guest_user know we've moved some bookmarks from under it
|
|
166
|
-
guest_user.reload if guest_user.persisted?
|
|
141
|
+
guest_user.bookmarks.reject { |b| current_user_bookmarks.include?(b.document_id) }.each do |b|
|
|
142
|
+
current_user.bookmarks << b
|
|
143
|
+
b.save!
|
|
167
144
|
end
|
|
168
145
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
146
|
+
# let guest_user know we've moved some bookmarks from under it
|
|
147
|
+
guest_user.reload if guest_user.persisted?
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
##
|
|
151
|
+
# To handle failed authorization attempts, redirect the user to the
|
|
152
|
+
# login form and persist the current request uri as a parameter
|
|
153
|
+
def access_denied
|
|
154
|
+
# send the user home if the access was previously denied by the same
|
|
155
|
+
# request to avoid sending the user back to the login page
|
|
156
|
+
# (e.g. protected page -> logout -> returned to protected page -> home)
|
|
157
|
+
redirect_to(root_url) && flash.discard && return if request.referer && request.referer.ends_with?(request.fullpath)
|
|
177
158
|
|
|
178
|
-
|
|
159
|
+
redirect_to(root_url) && return unless has_user_authentication_provider?
|
|
179
160
|
|
|
180
|
-
|
|
181
|
-
|
|
161
|
+
redirect_to new_user_session_url(referer: request.fullpath)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def determine_layout
|
|
165
|
+
'blacklight'
|
|
166
|
+
end
|
|
182
167
|
end
|
|
@@ -4,6 +4,9 @@ module Blacklight
|
|
|
4
4
|
extend ActiveSupport::Concern
|
|
5
5
|
|
|
6
6
|
included do
|
|
7
|
+
Deprecation.warn(self, "Blacklight::DefaultComponentConfiguration is deprecated and will be removed in the next release." \
|
|
8
|
+
"this means you must call add_results_document_tool, add_results_collection_tool, " \
|
|
9
|
+
"add_show_tools_partial and add_nav_action manually in your config")
|
|
7
10
|
add_results_document_tool(:bookmark, partial: 'bookmark_control', if: :render_bookmarks_control?)
|
|
8
11
|
|
|
9
12
|
add_results_collection_tool(:sort_widget)
|
|
@@ -16,14 +19,9 @@ module Blacklight
|
|
|
16
19
|
add_show_tools_partial(:citation)
|
|
17
20
|
|
|
18
21
|
add_nav_action(:bookmark, partial: 'blacklight/nav/bookmark', if: :render_bookmarks_control?)
|
|
19
|
-
add_nav_action(:saved_searches, partial: 'blacklight/nav/saved_searches', if: :render_saved_searches?)
|
|
20
22
|
add_nav_action(:search_history, partial: 'blacklight/nav/search_history')
|
|
21
23
|
end
|
|
22
24
|
|
|
23
|
-
def render_sms_action?(_config, _options)
|
|
24
|
-
sms_mappings.present?
|
|
25
|
-
end
|
|
26
|
-
|
|
27
25
|
module ClassMethods
|
|
28
26
|
# YARD will include inline disabling as docs, cannot do multiline inside @!macro. AND this must be separate from doc block.
|
|
29
27
|
# rubocop:disable Metrics/LineLength
|
|
@@ -41,55 +39,26 @@ module Blacklight
|
|
|
41
39
|
# @option opts [Symbol] :callback method for further processing of documents, receives Array of documents
|
|
42
40
|
def add_show_tools_partial(name, opts = {})
|
|
43
41
|
blacklight_config.add_show_tools_partial(name, opts)
|
|
44
|
-
|
|
45
|
-
return if method_defined?(name) || opts[:define_method] == false
|
|
46
|
-
|
|
47
|
-
# Define a simple action handler for the tool
|
|
48
|
-
define_method name do
|
|
49
|
-
@response, @documents = action_documents
|
|
50
|
-
|
|
51
|
-
if request.post? && opts[:callback] &&
|
|
52
|
-
(opts[:validator].blank? || self.send(opts[:validator]))
|
|
53
|
-
|
|
54
|
-
self.send(opts[:callback], @documents)
|
|
55
|
-
|
|
56
|
-
flash[:success] ||= I18n.t("blacklight.#{name}.success", default: nil)
|
|
57
|
-
|
|
58
|
-
respond_to do |format|
|
|
59
|
-
format.html do
|
|
60
|
-
return render "#{name}_success", layout: false if request.xhr?
|
|
61
|
-
redirect_to action_success_redirect_path
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
else
|
|
65
|
-
respond_to do |format|
|
|
66
|
-
format.html do
|
|
67
|
-
return render layout: false if request.xhr?
|
|
68
|
-
# Otherwise draw the full page
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
42
|
+
ActionBuilder.new(self, name, opts).build
|
|
73
43
|
end
|
|
74
44
|
# rubocop:enable Metrics/LineLength
|
|
75
45
|
|
|
46
|
+
deprecation_deprecate add_show_tools_partial: 'use blacklight_config.add_show_tools_partial instead'
|
|
47
|
+
|
|
76
48
|
# Add a tool to be displayed for each document in the search results.
|
|
77
49
|
# @!macro partial_if_unless
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
end
|
|
50
|
+
delegate :add_results_document_tool, to: :blacklight_config
|
|
51
|
+
deprecation_deprecate add_results_document_tool: 'use blacklight_config.add_results_document_tool instead'
|
|
81
52
|
|
|
82
53
|
# Add a tool to be displayed for the list of search results themselves.
|
|
83
54
|
# @!macro partial_if_unless
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
end
|
|
55
|
+
delegate :add_results_collection_tool, to: :blacklight_config
|
|
56
|
+
deprecation_deprecate add_results_collection_tool: 'use blacklight_config.add_results_collection_tool instead'
|
|
87
57
|
|
|
88
58
|
# Add a partial to the header navbar.
|
|
89
59
|
# @!macro partial_if_unless
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
end
|
|
60
|
+
delegate :add_nav_action, to: :blacklight_config
|
|
61
|
+
deprecation_deprecate add_nav_action: 'use blacklight_config.add_nav_action instead'
|
|
93
62
|
end
|
|
94
63
|
end
|
|
95
64
|
end
|
|
@@ -16,10 +16,13 @@ module Blacklight
|
|
|
16
16
|
)
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
+
# @param fields [Array<String>] a list of facet field names
|
|
20
|
+
# @return [Array<Solr::Response::Facets::FacetField>]
|
|
19
21
|
def facets_from_request(fields = facet_field_names)
|
|
20
22
|
fields.map { |field| facet_by_field_name(field) }.compact
|
|
21
23
|
end
|
|
22
24
|
|
|
25
|
+
# @return [Array<String>] a list of the facet field names from the configuration
|
|
23
26
|
def facet_field_names
|
|
24
27
|
blacklight_config.facet_fields.values.map(&:field)
|
|
25
28
|
end
|
|
@@ -2,20 +2,22 @@
|
|
|
2
2
|
module Blacklight::SearchContext
|
|
3
3
|
extend ActiveSupport::Concern
|
|
4
4
|
|
|
5
|
-
# The following code is executed when someone includes
|
|
5
|
+
# The following code is executed when someone includes Blacklight::Catalog::SearchSession in their
|
|
6
6
|
# own controller.
|
|
7
|
-
included do
|
|
8
|
-
|
|
7
|
+
included do
|
|
8
|
+
if respond_to? :helper_method
|
|
9
|
+
helper_method :current_search_session, :search_session
|
|
10
|
+
end
|
|
9
11
|
end
|
|
10
12
|
|
|
11
13
|
module ClassMethods
|
|
12
14
|
# Save the submitted search parameters in the search session
|
|
13
|
-
def record_search_parameters opts = { only: :index}
|
|
15
|
+
def record_search_parameters opts = { only: :index }
|
|
14
16
|
before_action :set_current_search_session, opts
|
|
15
17
|
end
|
|
16
18
|
end
|
|
17
19
|
|
|
18
|
-
|
|
20
|
+
private
|
|
19
21
|
|
|
20
22
|
# sets up the session[:search] hash if it doesn't already exist
|
|
21
23
|
def search_session
|
|
@@ -72,17 +74,18 @@ module Blacklight::SearchContext
|
|
|
72
74
|
def agent_is_crawler?
|
|
73
75
|
crawler_proc = blacklight_config.crawler_detector
|
|
74
76
|
return false if crawler_proc.nil? || current_user.present?
|
|
77
|
+
|
|
75
78
|
crawler_proc.call(request)
|
|
76
79
|
end
|
|
77
80
|
|
|
78
81
|
def find_or_initialize_search_session_from_params params
|
|
79
|
-
params_copy = params.reject { |k,v| blacklisted_search_session_params.include?(k.to_sym)
|
|
82
|
+
params_copy = params.reject { |k, v| blacklisted_search_session_params.include?(k.to_sym) || v.blank? }
|
|
80
83
|
|
|
81
|
-
return if params_copy.reject { |k,
|
|
84
|
+
return if params_copy.reject { |k, _v| [:action, :controller].include? k.to_sym }.blank?
|
|
82
85
|
|
|
83
86
|
saved_search = searches_from_history.find { |x| x.query_params == params_copy }
|
|
84
87
|
|
|
85
|
-
saved_search
|
|
88
|
+
saved_search || Search.create(query_params: params_copy).tap do |s|
|
|
86
89
|
add_to_search_history(s)
|
|
87
90
|
end
|
|
88
91
|
end
|
|
@@ -94,7 +97,7 @@ module Blacklight::SearchContext
|
|
|
94
97
|
session[:history].unshift(search.id)
|
|
95
98
|
|
|
96
99
|
if session[:history].length > blacklight_config.search_history_window
|
|
97
|
-
session[:history] = session[:history].slice(0, blacklight_config.search_history_window
|
|
100
|
+
session[:history] = session[:history].slice(0, blacklight_config.search_history_window)
|
|
98
101
|
end
|
|
99
102
|
end
|
|
100
103
|
|
|
@@ -106,16 +109,15 @@ module Blacklight::SearchContext
|
|
|
106
109
|
# calls setup_previous_document then setup_next_document.
|
|
107
110
|
# used in the show action for single view pagination.
|
|
108
111
|
def setup_next_and_previous_documents
|
|
109
|
-
if search_session['counter']
|
|
112
|
+
if search_session['counter'] && current_search_session
|
|
110
113
|
index = search_session['counter'].to_i - 1
|
|
111
|
-
response, documents =
|
|
114
|
+
response, documents = search_service.previous_and_next_documents_for_search index, search_state.reset(current_search_session.query_params).to_hash
|
|
112
115
|
|
|
113
116
|
search_session['total'] = response.total
|
|
114
|
-
|
|
115
|
-
@previous_document = documents.first
|
|
116
|
-
@next_document = documents.last
|
|
117
|
+
{ prev: documents.first, next: documents.last }
|
|
117
118
|
end
|
|
118
119
|
rescue Blacklight::Exceptions::InvalidRequest => e
|
|
119
120
|
logger.warn "Unable to setup next and previous documents: #{e}"
|
|
121
|
+
nil
|
|
120
122
|
end
|
|
121
123
|
end
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
#
|
|
8
8
|
# = Search Field blacklight_configuration Hash =
|
|
9
9
|
# [:key]
|
|
10
|
-
# "title", required, unique key used in search URLs to specify search_field
|
|
10
|
+
# "title", required, unique key used in search URLs to specify search_field
|
|
11
11
|
# [:label]
|
|
12
12
|
# "Title", # user-displayable label, optional, if not supplied :key.titlecase will be used
|
|
13
13
|
# [:qt]
|
|
@@ -18,30 +18,20 @@
|
|
|
18
18
|
# { :qf => "$something" } # optional hash of additional parameters that will be passed using Solr LocalParams syntax, that can use dollar sign to reference other solr variables.
|
|
19
19
|
# [:include_in_simple_select]
|
|
20
20
|
# false. Defaults to true, but you can set to false to have a search field defined for deep-links or BL extensions, but not actually included in the HTML select for simple search choice.
|
|
21
|
-
#
|
|
21
|
+
#
|
|
22
22
|
# Optionally you can supply a :key, which is what Blacklight will use
|
|
23
23
|
# to identify this search field in HTTP query params. If no :key is
|
|
24
24
|
# supplied, one will be computed from the :label. If that will
|
|
25
|
-
# result in a collision of keys, you should supply one explicitly.
|
|
25
|
+
# result in a collision of keys, you should supply one explicitly.
|
|
26
26
|
#
|
|
27
27
|
##
|
|
28
28
|
module Blacklight::SearchFields
|
|
29
|
-
extend Deprecation
|
|
30
|
-
self.deprecation_horizon = 'blacklight 7.x'
|
|
31
|
-
|
|
32
29
|
# Looks up search field config list from blacklight_config[:search_fields], and
|
|
33
|
-
# 'normalizes' all field config hashes using normalize_config method.
|
|
30
|
+
# 'normalizes' all field config hashes using normalize_config method.
|
|
34
31
|
def search_field_list
|
|
35
32
|
blacklight_config.search_fields.values
|
|
36
33
|
end
|
|
37
34
|
|
|
38
|
-
# Looks up a search field blacklight_config hash from search_field_list having
|
|
39
|
-
# a certain supplied :key.
|
|
40
|
-
def search_field_def_for_key(key)
|
|
41
|
-
blacklight_config.search_fields[key]
|
|
42
|
-
end
|
|
43
|
-
deprecation_deprecate search_field_def_for_key: "Use blacklight_config.search_fields[key]"
|
|
44
|
-
|
|
45
35
|
# Returns default search field, used for simpler display in history, etc.
|
|
46
36
|
# if not set in blacklight_config, defaults to first field listed in #search_field_list
|
|
47
37
|
def default_search_field
|
|
@@ -21,12 +21,7 @@ module Blacklight
|
|
|
21
21
|
flash[:error] = I18n.t('blacklight.search_history.clear.failure')
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
redirect_back fallback_location: blacklight.search_history_path
|
|
26
|
-
else
|
|
27
|
-
# Deprecated in Rails 5.0
|
|
28
|
-
redirect_to :back
|
|
29
|
-
end
|
|
24
|
+
redirect_back fallback_location: blacklight.search_history_path
|
|
30
25
|
end
|
|
31
26
|
end
|
|
32
27
|
end
|
|
@@ -3,14 +3,16 @@ module Blacklight::TokenBasedUser
|
|
|
3
3
|
extend ActiveSupport::Concern
|
|
4
4
|
|
|
5
5
|
included do
|
|
6
|
-
|
|
6
|
+
if respond_to? :helper_method
|
|
7
|
+
helper_method :encrypt_user_id
|
|
8
|
+
end
|
|
7
9
|
|
|
8
10
|
rescue_from Blacklight::Exceptions::ExpiredSessionToken do
|
|
9
11
|
head :unauthorized
|
|
10
12
|
end
|
|
11
13
|
end
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
private
|
|
14
16
|
|
|
15
17
|
def token_or_current_or_guest_user
|
|
16
18
|
token_user || current_or_guest_user
|
|
@@ -18,9 +20,9 @@ module Blacklight::TokenBasedUser
|
|
|
18
20
|
|
|
19
21
|
def token_user
|
|
20
22
|
@token_user ||= if params[:encrypted_user_id]
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
user_id = decrypt_user_id params[:encrypted_user_id]
|
|
24
|
+
User.find(user_id)
|
|
25
|
+
end
|
|
24
26
|
end
|
|
25
27
|
|
|
26
28
|
# Used for #export action, with encrypted user_id.
|
|
@@ -42,21 +44,34 @@ module Blacklight::TokenBasedUser
|
|
|
42
44
|
end
|
|
43
45
|
|
|
44
46
|
def export_secret_token
|
|
45
|
-
|
|
47
|
+
secret_key_generator.generate_key('encrypted user session key')[0..(key_len - 1)]
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def secret_key_generator
|
|
51
|
+
@secret_key_generator ||= begin
|
|
52
|
+
app = Rails.application
|
|
53
|
+
|
|
54
|
+
secret_key_base = if app.respond_to?(:credentials)
|
|
55
|
+
# Rails 5.2+
|
|
56
|
+
app.credentials.secret_key_base
|
|
57
|
+
else
|
|
58
|
+
# Rails <= 5.1
|
|
59
|
+
app.secrets.secret_key_base
|
|
60
|
+
end
|
|
61
|
+
ActiveSupport::KeyGenerator.new(secret_key_base)
|
|
62
|
+
end
|
|
46
63
|
end
|
|
47
64
|
|
|
48
65
|
def message_encryptor
|
|
49
66
|
ActiveSupport::MessageEncryptor.new(export_secret_token)
|
|
50
67
|
end
|
|
51
68
|
|
|
52
|
-
private
|
|
53
|
-
|
|
54
69
|
# Ruby 2.4 requires keys of very particular lengths
|
|
55
70
|
def key_len
|
|
56
71
|
if ActiveSupport::MessageEncryptor.respond_to? :key_len
|
|
57
72
|
ActiveSupport::MessageEncryptor.key_len
|
|
58
73
|
else
|
|
59
|
-
|
|
74
|
+
0
|
|
60
75
|
end
|
|
61
76
|
end
|
|
62
77
|
end
|