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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
# Methods added to this helper will be available to all templates in the hosting
|
|
3
4
|
# application
|
|
4
5
|
module Blacklight
|
|
@@ -46,5 +47,64 @@ module Blacklight
|
|
|
46
47
|
def container_classes
|
|
47
48
|
'container'
|
|
48
49
|
end
|
|
50
|
+
|
|
51
|
+
##
|
|
52
|
+
# Render "document actions" area for navigation header
|
|
53
|
+
# (normally renders "Saved Searches", "History", "Bookmarks")
|
|
54
|
+
# These things are added by add_nav_action
|
|
55
|
+
#
|
|
56
|
+
# @param [Hash] options
|
|
57
|
+
# @return [String]
|
|
58
|
+
def render_nav_actions(options = {}, &block)
|
|
59
|
+
render_filtered_partials(blacklight_config.navbar.partials, options, &block)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
##
|
|
63
|
+
# Open Search discovery tag for HTML <head> links
|
|
64
|
+
# @return [String]
|
|
65
|
+
def opensearch_description_tag title, href
|
|
66
|
+
tag :link, href: href, title: title, type: "application/opensearchdescription+xml", rel: "search"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
##
|
|
70
|
+
# Get the page's HTML title
|
|
71
|
+
#
|
|
72
|
+
# @return [String]
|
|
73
|
+
def render_page_title
|
|
74
|
+
(content_for(:page_title) if content_for?(:page_title)) || @page_title || application_name
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
##
|
|
78
|
+
# Create <link rel="alternate"> links from a documents dynamically
|
|
79
|
+
# provided export formats.
|
|
80
|
+
#
|
|
81
|
+
# Returns empty string if no links available.
|
|
82
|
+
#
|
|
83
|
+
# @param [SolrDocument] document
|
|
84
|
+
# @param [Hash] options
|
|
85
|
+
# @option options [Boolean] :unique ensures only one link is output for every
|
|
86
|
+
# content type, e.g. as required by atom
|
|
87
|
+
# @option options [Array<String>] :exclude array of format shortnames to not include in the output
|
|
88
|
+
# @return [String]
|
|
89
|
+
def render_link_rel_alternates(document = @document, options = {})
|
|
90
|
+
return if document.nil?
|
|
91
|
+
|
|
92
|
+
document_presenter(document).link_rel_alternates(options)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
##
|
|
96
|
+
# Render classes for the <body> element
|
|
97
|
+
# @return [String]
|
|
98
|
+
def render_body_class
|
|
99
|
+
extra_body_classes.join " "
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
##
|
|
103
|
+
# List of classes to be applied to the <body> element
|
|
104
|
+
# @see render_body_class
|
|
105
|
+
# @return [Array<String>]
|
|
106
|
+
def extra_body_classes
|
|
107
|
+
@extra_body_classes ||= ["blacklight-#{controller.controller_name}", "blacklight-#{[controller.controller_name, controller.action_name].join('-')}"]
|
|
108
|
+
end
|
|
49
109
|
end
|
|
50
110
|
end
|
|
@@ -1,28 +1,16 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
module Blacklight::RenderPartialsHelperBehavior
|
|
3
|
-
extend Deprecation
|
|
4
2
|
|
|
3
|
+
module Blacklight::RenderPartialsHelperBehavior
|
|
5
4
|
##
|
|
6
5
|
# Render the document index view
|
|
7
6
|
#
|
|
8
7
|
# @param [Array<SolrDocument>] documents list of documents to render
|
|
9
8
|
# @param [Hash] locals to pass to the render call
|
|
10
9
|
# @return [String]
|
|
11
|
-
def render_document_index documents
|
|
12
|
-
unless documents
|
|
13
|
-
Deprecation.warn(self, "Calling render_document_index without documents is deprecated and will be removed in version 8")
|
|
14
|
-
documents = @response.documents
|
|
15
|
-
end
|
|
10
|
+
def render_document_index documents, locals = {}
|
|
16
11
|
render_document_index_with_view(document_index_view_type, documents, locals)
|
|
17
12
|
end
|
|
18
13
|
|
|
19
|
-
##
|
|
20
|
-
# Render the document index for a grouped response
|
|
21
|
-
def render_grouped_document_index
|
|
22
|
-
render 'catalog/group'
|
|
23
|
-
end
|
|
24
|
-
deprecation_deprecate render_grouped_document_index: 'Removed without replacement'
|
|
25
|
-
|
|
26
14
|
##
|
|
27
15
|
# Return the list of partials for a given solr document
|
|
28
16
|
# @param [SolrDocument] doc solr document to render partials for
|
|
@@ -34,6 +22,8 @@ module Blacklight::RenderPartialsHelperBehavior
|
|
|
34
22
|
render_document_partial(doc, action_name, locals)
|
|
35
23
|
end, "\n")
|
|
36
24
|
end
|
|
25
|
+
Blacklight.deprecation.deprecate_methods(self, render_document_partials: 'Replace this call with: "document_component = blacklight_config.view_config(:atom).summary_component
|
|
26
|
+
render document_component.new(presenter: document_presenter(document), component: :div, show: true)"')
|
|
37
27
|
|
|
38
28
|
##
|
|
39
29
|
# Return the list of xml for a given solr document. Doesn't safely escape for HTML.
|
|
@@ -60,7 +50,7 @@ module Blacklight::RenderPartialsHelperBehavior
|
|
|
60
50
|
# @param [String] base_name base name for the partial
|
|
61
51
|
# @param [Hash] locals local variables to pass through to the partials
|
|
62
52
|
def render_document_partial(doc, base_name, locals = {})
|
|
63
|
-
format =
|
|
53
|
+
format = document_partial_name(doc, base_name)
|
|
64
54
|
|
|
65
55
|
view_type = document_index_view_type
|
|
66
56
|
template = cached_view ['show', view_type, base_name, format].join('_') do
|
|
@@ -69,6 +59,7 @@ module Blacklight::RenderPartialsHelperBehavior
|
|
|
69
59
|
if template
|
|
70
60
|
template.render(self, locals.merge(document: doc))
|
|
71
61
|
else
|
|
62
|
+
logger.warn("No template was found for base_name: '#{base_name}', view_type: '#{view_type}' in render_document_partial")
|
|
72
63
|
''
|
|
73
64
|
end
|
|
74
65
|
end
|
|
@@ -118,6 +109,8 @@ module Blacklight::RenderPartialsHelperBehavior
|
|
|
118
109
|
]
|
|
119
110
|
end
|
|
120
111
|
|
|
112
|
+
private
|
|
113
|
+
|
|
121
114
|
##
|
|
122
115
|
# Return a normalized partial name for rendering a single document
|
|
123
116
|
#
|
|
@@ -130,9 +123,6 @@ module Blacklight::RenderPartialsHelperBehavior
|
|
|
130
123
|
|
|
131
124
|
type_field_to_partial_name(document, display_type)
|
|
132
125
|
end
|
|
133
|
-
deprecation_deprecate document_partial_name: 'Moving to a private method'
|
|
134
|
-
|
|
135
|
-
private
|
|
136
126
|
|
|
137
127
|
##
|
|
138
128
|
# Return a partial name for rendering a document
|
|
@@ -190,21 +180,13 @@ module Blacklight::RenderPartialsHelperBehavior
|
|
|
190
180
|
def find_document_index_template_with_view view_type, locals
|
|
191
181
|
document_index_path_templates.each do |str|
|
|
192
182
|
partial = format(str, index_view_type: view_type)
|
|
183
|
+
name = partial.split('/').last
|
|
184
|
+
prefix = partial.split('/').first if partial.include?('/')
|
|
193
185
|
logger&.debug "Looking for document index partial #{partial}"
|
|
194
|
-
|
|
195
|
-
template =
|
|
196
|
-
name = partial.split('/').last
|
|
197
|
-
prefix = partial.split('/').first if partial.include?('/')
|
|
198
|
-
|
|
199
|
-
prefixes = lookup_context.prefixes + [prefix, ""].compact
|
|
200
|
-
lookup_context.find_all(name, prefixes, true, locals.keys + [:documents], {}).first
|
|
201
|
-
else
|
|
202
|
-
lookup_context.find_all(partial, lookup_context.prefixes + [""], true, locals.keys + [:documents], {}).first
|
|
203
|
-
end
|
|
204
|
-
|
|
186
|
+
prefixes = lookup_context.prefixes + [prefix, ""].compact
|
|
187
|
+
template = lookup_context.find_all(name, prefixes, true, locals.keys + [:documents], {}).first
|
|
205
188
|
return template if template
|
|
206
189
|
end
|
|
207
|
-
|
|
208
190
|
nil
|
|
209
191
|
end
|
|
210
192
|
|
|
@@ -1,15 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
##
|
|
3
4
|
# URL helper methods
|
|
4
5
|
module Blacklight::UrlHelperBehavior
|
|
5
|
-
extend Deprecation
|
|
6
|
-
|
|
7
|
-
# @deprecated
|
|
8
|
-
def url_for_document(doc, options = {})
|
|
9
|
-
search_state.url_for_document(doc, options)
|
|
10
|
-
end
|
|
11
|
-
deprecation_deprecate url_for_document: 'Use SearchState#url_for_document directly'
|
|
12
|
-
|
|
13
6
|
# Uses the catalog_path route to create a link to the show page for an item.
|
|
14
7
|
# catalog_path accepts a hash. The solr query params are stored in the session,
|
|
15
8
|
# so we only need the +counter+ param here. We also need to know if we are viewing to document as part of search results.
|
|
@@ -19,9 +12,9 @@ module Blacklight::UrlHelperBehavior
|
|
|
19
12
|
# @param opts [Hash] the options to create the link with
|
|
20
13
|
# @option opts [Number] :counter (nil) the count to set in the session (for paging through a query result)
|
|
21
14
|
# @example Passing in an image
|
|
22
|
-
# link_to_document(doc, '<img src="thumbnail.png">', counter: 3) #=> "<a href=\"catalog/123\" data-
|
|
15
|
+
# link_to_document(doc, '<img src="thumbnail.png">', counter: 3) #=> "<a href=\"catalog/123\" data-context-href=\"/catalog/123/track?counter=3&search_id=999\"><img src="thumbnail.png"></a>
|
|
23
16
|
# @example With the default document link field
|
|
24
|
-
# link_to_document(doc, counter: 3) #=> "<a href=\"catalog/123\" data-
|
|
17
|
+
# link_to_document(doc, counter: 3) #=> "<a href=\"catalog/123\" data-context-href=\"/catalog/123/track?counter=3&search_id=999\">My Title</a>
|
|
25
18
|
def link_to_document(doc, field_or_opts = nil, opts = { counter: nil })
|
|
26
19
|
label = case field_or_opts
|
|
27
20
|
when NilClass
|
|
@@ -29,18 +22,11 @@ module Blacklight::UrlHelperBehavior
|
|
|
29
22
|
when Hash
|
|
30
23
|
opts = field_or_opts
|
|
31
24
|
document_presenter(doc).heading
|
|
32
|
-
when Proc, Symbol
|
|
33
|
-
Deprecation.warn(self, "passing a #{field_or_opts.class} to link_to_document is deprecated and will be removed in Blacklight 8")
|
|
34
|
-
Deprecation.silence(Blacklight::IndexPresenter) do
|
|
35
|
-
index_presenter(doc).label field_or_opts, opts
|
|
36
|
-
end
|
|
37
25
|
else # String
|
|
38
26
|
field_or_opts
|
|
39
27
|
end
|
|
40
28
|
|
|
41
|
-
|
|
42
|
-
link_to label, url_for_document(doc), document_link_params(doc, opts)
|
|
43
|
-
end
|
|
29
|
+
link_to label, search_state.url_for_document(doc), document_link_params(doc, opts)
|
|
44
30
|
end
|
|
45
31
|
|
|
46
32
|
# @private
|
|
@@ -49,61 +35,42 @@ module Blacklight::UrlHelperBehavior
|
|
|
49
35
|
end
|
|
50
36
|
private :document_link_params
|
|
51
37
|
|
|
52
|
-
##
|
|
53
|
-
# Link to the previous document in the current search context
|
|
54
|
-
# @deprecated
|
|
55
|
-
def link_to_previous_document(previous_document, classes: 'previous', **addl_link_opts)
|
|
56
|
-
link_opts = session_tracking_params(previous_document, search_session['counter'].to_i - 1).merge(class: classes, rel: 'prev').merge(addl_link_opts)
|
|
57
|
-
link_to_unless previous_document.nil?, raw(t('views.pagination.previous')), url_for_document(previous_document), link_opts do
|
|
58
|
-
tag.span raw(t('views.pagination.previous')), class: 'previous'
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
deprecation_deprecate link_to_previous_document: 'Moving to Blacklight::SearchContextComponent'
|
|
62
|
-
|
|
63
|
-
##
|
|
64
|
-
# Link to the next document in the current search context
|
|
65
|
-
# @deprecated
|
|
66
|
-
def link_to_next_document(next_document, classes: 'next', **addl_link_opts)
|
|
67
|
-
link_opts = session_tracking_params(next_document, search_session['counter'].to_i + 1).merge(class: classes, rel: 'next').merge(addl_link_opts)
|
|
68
|
-
link_to_unless next_document.nil?, raw(t('views.pagination.next')), url_for_document(next_document), link_opts do
|
|
69
|
-
tag.span raw(t('views.pagination.next')), class: 'next'
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
deprecation_deprecate link_to_previous_document: 'Moving to Blacklight::SearchContextComponent'
|
|
73
|
-
|
|
74
38
|
##
|
|
75
39
|
# Attributes for a link that gives a URL we can use to track clicks for the current search session
|
|
76
|
-
# @private
|
|
77
40
|
# @param [SolrDocument] document
|
|
78
41
|
# @param [Integer] counter
|
|
79
42
|
# @example
|
|
80
43
|
# session_tracking_params(SolrDocument.new(id: 123), 7)
|
|
81
|
-
# => { data: { :
|
|
82
|
-
def session_tracking_params document, counter
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
44
|
+
# => { data: { context_href: '/catalog/123/track?counter=7&search_id=999' } }
|
|
45
|
+
def session_tracking_params document, counter, per_page: search_session['per_page'], search_id: current_search_session&.id
|
|
46
|
+
path_params = { per_page: params.fetch(:per_page, per_page), counter: counter, search_id: search_id }
|
|
47
|
+
if blacklight_config.track_search_session.storage == 'server'
|
|
48
|
+
path_params[:document_id] = document&.id
|
|
49
|
+
path_params[:search_id] = search_id
|
|
87
50
|
end
|
|
51
|
+
path = session_tracking_path(document, path_params)
|
|
52
|
+
return {} if path.nil?
|
|
88
53
|
|
|
89
|
-
|
|
54
|
+
context_method = blacklight_config.track_search_session.storage == 'client' ? 'get' : 'post'
|
|
55
|
+
{ data: { context_href: path, context_method: context_method } }
|
|
90
56
|
end
|
|
91
|
-
private :session_tracking_params
|
|
92
57
|
|
|
93
58
|
##
|
|
94
59
|
# Get the URL for tracking search sessions across pages using polymorphic routing
|
|
95
60
|
def session_tracking_path document, params = {}
|
|
96
|
-
return if document.nil? || !blacklight_config
|
|
61
|
+
return if document.nil? || !blacklight_config.track_search_session.storage
|
|
97
62
|
|
|
98
63
|
if main_app.respond_to?(controller_tracking_method)
|
|
99
64
|
return main_app.public_send(controller_tracking_method, params.merge(id: document))
|
|
100
65
|
end
|
|
101
66
|
|
|
102
67
|
raise "Unable to find #{controller_tracking_method} route helper. " \
|
|
103
|
-
|
|
68
|
+
"Did you add `concerns :searchable` routing mixin to your `config/routes.rb`?"
|
|
104
69
|
end
|
|
105
70
|
|
|
106
71
|
def controller_tracking_method
|
|
72
|
+
return blacklight_config.track_search_session.url_helper if blacklight_config.track_search_session.url_helper
|
|
73
|
+
|
|
107
74
|
"track_#{controller_name}_path"
|
|
108
75
|
end
|
|
109
76
|
|
|
@@ -111,28 +78,6 @@ module Blacklight::UrlHelperBehavior
|
|
|
111
78
|
# link based helpers ->
|
|
112
79
|
#
|
|
113
80
|
|
|
114
|
-
# create link to query (e.g. spelling suggestion)
|
|
115
|
-
# @deprecated
|
|
116
|
-
def link_to_query(query)
|
|
117
|
-
p = search_state.to_h.except(:page, :action)
|
|
118
|
-
p[:q] = query
|
|
119
|
-
link_to(query, search_action_path(p))
|
|
120
|
-
end
|
|
121
|
-
deprecation_deprecate link_to_query: 'Removed without replacement'
|
|
122
|
-
|
|
123
|
-
##
|
|
124
|
-
# Get the path to the search action with any parameters (e.g. view type)
|
|
125
|
-
# that should be persisted across search sessions.
|
|
126
|
-
# @deprecated
|
|
127
|
-
def start_over_path query_params = params
|
|
128
|
-
h = {}
|
|
129
|
-
current_index_view_type = document_index_view_type(query_params)
|
|
130
|
-
h[:view] = current_index_view_type unless current_index_view_type == default_document_index_view_type
|
|
131
|
-
|
|
132
|
-
search_action_path(h)
|
|
133
|
-
end
|
|
134
|
-
deprecation_deprecate start_over_path: 'Removed without replacement'
|
|
135
|
-
|
|
136
81
|
# Create a link back to the index screen, keeping the user's facet, query and paging choices intact by using session.
|
|
137
82
|
# @example
|
|
138
83
|
# link_back_to_catalog(label: 'Back to Search')
|
|
@@ -165,30 +110,9 @@ module Blacklight::UrlHelperBehavior
|
|
|
165
110
|
link_to label, link_url, opts
|
|
166
111
|
end
|
|
167
112
|
|
|
168
|
-
#
|
|
113
|
+
# Use in e.g. the search history display, where we want something more like text instead of the normal constraints
|
|
169
114
|
def link_to_previous_search(params)
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
end
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
# Get url parameters to a search within a grouped result set
|
|
176
|
-
#
|
|
177
|
-
# @deprecated
|
|
178
|
-
# @param [Blacklight::Solr::Response::Group] group
|
|
179
|
-
# @return [Hash]
|
|
180
|
-
def add_group_facet_params_and_redirect group
|
|
181
|
-
search_state.add_facet_params_and_redirect(group.field, group.key)
|
|
182
|
-
end
|
|
183
|
-
deprecation_deprecate add_group_facet_params_and_redirect: 'Removed without replacement'
|
|
184
|
-
|
|
185
|
-
# A URL to refworks export, with an embedded callback URL to this app.
|
|
186
|
-
# the callback URL is to bookmarks#export, which delivers a list of
|
|
187
|
-
# user's bookmarks in 'refworks marc txt' format -- we tell refworks
|
|
188
|
-
# to expect that format.
|
|
189
|
-
# @deprecated
|
|
190
|
-
def bookmarks_export_url(format, params = {})
|
|
191
|
-
bookmarks_url(params.merge(format: format, encrypted_user_id: encrypt_user_id(current_or_guest_user.id)))
|
|
115
|
+
search_state = controller.search_state_class.new(params, blacklight_config, self)
|
|
116
|
+
link_to(render(Blacklight::ConstraintsComponent.for_search_history(search_state: search_state)), search_action_path(params))
|
|
192
117
|
end
|
|
193
|
-
deprecation_deprecate bookmarks_export_url: 'Removed without replacement'
|
|
194
118
|
end
|
|
@@ -1,25 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
//change form submit toggle to checkbox
|
|
3
|
-
Blacklight.doBookmarkToggleBehavior = function() {
|
|
4
|
-
if (typeof Blacklight.do_bookmark_toggle_behavior == 'function') {
|
|
5
|
-
console.warn("do_bookmark_toggle_behavior is deprecated. Use doBookmarkToggleBehavior instead.");
|
|
6
|
-
return Blacklight.do_bookmark_toggle_behavior();
|
|
7
|
-
}
|
|
8
|
-
$(Blacklight.doBookmarkToggleBehavior.selector).blCheckboxSubmit({
|
|
9
|
-
// cssClass is added to elements added, plus used for id base
|
|
10
|
-
cssClass: 'toggle-bookmark',
|
|
11
|
-
success: function(checked, response) {
|
|
12
|
-
if (response.bookmarks) {
|
|
13
|
-
$('[data-role=bookmark-counter]').text(response.bookmarks.count);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
};
|
|
18
|
-
Blacklight.doBookmarkToggleBehavior.selector = 'form.bookmark-toggle';
|
|
1
|
+
import CheckboxSubmit from 'blacklight/checkbox_submit'
|
|
19
2
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
3
|
+
const BookmarkToggle = (e) => {
|
|
4
|
+
if (e.target.matches('[data-checkboxsubmit-target="checkbox"]')) {
|
|
5
|
+
const form = e.target.closest('form')
|
|
6
|
+
if (form) new CheckboxSubmit(form).clicked(e);
|
|
7
|
+
}
|
|
8
|
+
};
|
|
23
9
|
|
|
10
|
+
document.addEventListener('click', BookmarkToggle);
|
|
24
11
|
|
|
25
|
-
|
|
12
|
+
export default BookmarkToggle
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
const ButtonFocus = (e) => {
|
|
2
2
|
// Button clicks should change focus. As of 10/3/19, Firefox for Mac and
|
|
3
3
|
// Safari both do not set focus to a button on button click.
|
|
4
4
|
// See https://zellwk.com/blog/inconsistent-button-behavior/ for background information
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
if (e.target.matches('[data-toggle="collapse"]') || e.target.matches('[data-bs-toggle="collapse"]')) {
|
|
6
|
+
e.target.focus()
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
document.addEventListener('click', ButtonFocus)
|
|
11
|
+
|
|
12
|
+
export default ButtonFocus
|
|
@@ -1,134 +1,80 @@
|
|
|
1
|
-
/*
|
|
2
|
-
that will convert a "toggle" form, with single submit button to add/remove
|
|
1
|
+
/* Converts a "toggle" form, with single submit button to add/remove
|
|
3
2
|
something, like used for Bookmarks, into an AJAXy checkbox instead.
|
|
4
|
-
|
|
5
3
|
Apply to a form. Does require certain assumption about the form:
|
|
6
4
|
1) The same form 'action' href must be used for both ADD and REMOVE
|
|
7
5
|
actions, with the different being the hidden input name="_method"
|
|
8
6
|
being set to "put" or "delete" -- that's the Rails method to pretend
|
|
9
7
|
to be doing a certain HTTP verb. So same URL, PUT to add, DELETE
|
|
10
8
|
to remove. This plugin assumes that.
|
|
11
|
-
|
|
12
9
|
Plus, the form this is applied to should provide a data-doc-id
|
|
13
10
|
attribute (HTML5-style doc-*) that contains the id/primary key
|
|
14
11
|
of the object in question -- used by plugin for a unique value for
|
|
15
12
|
DOM id's.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
Pass in options for your class name and labels:
|
|
20
|
-
$("form.something").blCheckboxSubmit({
|
|
21
|
-
//cssClass is added to elements added, plus used for id base
|
|
22
|
-
cssClass: "toggle_my_kinda_form",
|
|
23
|
-
error: function() {
|
|
24
|
-
#optional callback
|
|
25
|
-
},
|
|
26
|
-
success: function(after_success_check_state) {
|
|
27
|
-
#optional callback
|
|
28
|
-
}
|
|
29
|
-
});
|
|
13
|
+
Uses HTML for a checkbox compatible with Bootstrap 4.
|
|
14
|
+
new CheckboxSubmit(document.querySelector('form.something')).render()
|
|
30
15
|
*/
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
error: function() {
|
|
97
|
-
label.removeAttr('disabled');
|
|
98
|
-
checkbox.removeAttr('disabled');
|
|
99
|
-
options.error.call();
|
|
100
|
-
},
|
|
101
|
-
success: function(data, status, xhr) {
|
|
102
|
-
//if app isn't running at all, xhr annoyingly
|
|
103
|
-
//reports success with status 0.
|
|
104
|
-
if (xhr.status != 0) {
|
|
105
|
-
checked = ! checked;
|
|
106
|
-
updateStateFor(checked);
|
|
107
|
-
label.removeAttr('disabled');
|
|
108
|
-
checkbox.removeAttr('disabled');
|
|
109
|
-
options.success.call(form, checked, xhr.responseJSON);
|
|
110
|
-
} else {
|
|
111
|
-
label.removeAttr('disabled');
|
|
112
|
-
checkbox.removeAttr('disabled');
|
|
113
|
-
options.error.call();
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
return false;
|
|
119
|
-
}); //checkbox.click
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}); //this.each
|
|
123
|
-
return this;
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
$.fn.blCheckboxSubmit.defaults = {
|
|
127
|
-
//cssClass is added to elements added, plus used for id base
|
|
128
|
-
cssClass: 'blCheckboxSubmit',
|
|
129
|
-
error: function() {
|
|
130
|
-
alert("Error");
|
|
131
|
-
},
|
|
132
|
-
success: function() {} //callback
|
|
133
|
-
};
|
|
134
|
-
})(jQuery);
|
|
16
|
+
export default class CheckboxSubmit {
|
|
17
|
+
constructor(form) {
|
|
18
|
+
this.form = form
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
async clicked(evt) {
|
|
22
|
+
this.spanTarget.innerHTML = this.form.getAttribute('data-inprogress')
|
|
23
|
+
this.labelTarget.setAttribute('disabled', 'disabled');
|
|
24
|
+
this.checkboxTarget.setAttribute('disabled', 'disabled');
|
|
25
|
+
const response = await fetch(this.formTarget.getAttribute('action'), {
|
|
26
|
+
body: new FormData(this.formTarget),
|
|
27
|
+
method: this.formTarget.getAttribute('method').toUpperCase(),
|
|
28
|
+
headers: {
|
|
29
|
+
'Accept': 'application/json',
|
|
30
|
+
'X-Requested-With': 'XMLHttpRequest',
|
|
31
|
+
'X-CSRF-Token': document.querySelector('meta[name=csrf-token]')?.content
|
|
32
|
+
}
|
|
33
|
+
})
|
|
34
|
+
this.labelTarget.removeAttribute('disabled')
|
|
35
|
+
this.checkboxTarget.removeAttribute('disabled')
|
|
36
|
+
if (response.ok) {
|
|
37
|
+
const json = await response.json()
|
|
38
|
+
this.updateStateFor(!this.checked)
|
|
39
|
+
document.querySelector('[data-role=bookmark-counter]').innerHTML = json.bookmarks.count
|
|
40
|
+
} else {
|
|
41
|
+
alert('Error')
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
get checked() {
|
|
46
|
+
return (this.form.querySelectorAll('input[name=_method][value=delete]').length != 0)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
get formTarget() {
|
|
50
|
+
return this.form
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
get labelTarget() {
|
|
54
|
+
return this.form.querySelector('[data-checkboxsubmit-target="label"]')
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
get checkboxTarget() {
|
|
58
|
+
return this.form.querySelector('[data-checkboxsubmit-target="checkbox"]')
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
get spanTarget() {
|
|
62
|
+
return this.form.querySelector('[data-checkboxsubmit-target="span"]')
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
updateStateFor(state) {
|
|
66
|
+
this.checkboxTarget.checked = state
|
|
67
|
+
|
|
68
|
+
if (state) {
|
|
69
|
+
this.labelTarget.classList.add('checked')
|
|
70
|
+
//Set the Rails hidden field that fakes an HTTP verb
|
|
71
|
+
//properly for current state action.
|
|
72
|
+
this.formTarget.querySelector('input[name=_method]').value = 'delete'
|
|
73
|
+
this.spanTarget.innerHTML = this.form.getAttribute('data-present')
|
|
74
|
+
} else {
|
|
75
|
+
this.labelTarget.classList.remove('checked')
|
|
76
|
+
this.formTarget.querySelector('input[name=_method]').value = 'put'
|
|
77
|
+
this.spanTarget.innerHTML = this.form.getAttribute('data-absent')
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
const Blacklight = function() {
|
|
2
|
-
|
|
2
|
+
const buffer = new Array;
|
|
3
3
|
return {
|
|
4
4
|
onLoad: function(func) {
|
|
5
5
|
buffer.push(func);
|
|
6
6
|
},
|
|
7
7
|
|
|
8
8
|
activate: function() {
|
|
9
|
-
for(
|
|
9
|
+
for(let i = 0; i < buffer.length; i++) {
|
|
10
10
|
buffer[i].call();
|
|
11
11
|
}
|
|
12
12
|
},
|
|
13
13
|
|
|
14
14
|
listeners: function () {
|
|
15
|
-
|
|
15
|
+
const listeners = [];
|
|
16
16
|
if (typeof Turbo !== 'undefined') {
|
|
17
|
-
listeners.push('turbo:load');
|
|
17
|
+
listeners.push('turbo:load', 'turbo:frame-load');
|
|
18
18
|
} else if (typeof Turbolinks !== 'undefined' && Turbolinks.supported) {
|
|
19
19
|
// Turbolinks 5
|
|
20
20
|
if (Turbolinks.BrowserAdapter) {
|
|
@@ -51,4 +51,5 @@ Blacklight.onLoad(function () {
|
|
|
51
51
|
elem.classList.add('js')
|
|
52
52
|
})
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
|
|
55
|
+
export default Blacklight
|