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
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module Blacklight::RenderPartialsHelperBehavior
|
|
3
|
+
##
|
|
4
|
+
# Render the document index view
|
|
5
|
+
#
|
|
6
|
+
# @param [Array<SolrDocument>] documents list of documents to render
|
|
7
|
+
# @param [Hash] locals to pass to the render call
|
|
8
|
+
# @return [String]
|
|
9
|
+
def render_document_index documents = nil, locals = {}
|
|
10
|
+
documents ||= @response.documents
|
|
11
|
+
render_document_index_with_view(document_index_view_type, documents, locals)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
##
|
|
15
|
+
# Render the document index for a grouped response
|
|
16
|
+
def render_grouped_document_index
|
|
17
|
+
render 'catalog/group'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
##
|
|
21
|
+
# Return the list of partials for a given solr document
|
|
22
|
+
# @param [SolrDocument] doc solr document to render partials for
|
|
23
|
+
# @param [Array<String>] partials list of partials to render
|
|
24
|
+
# @param [Hash] locals local variables to pass to the render call
|
|
25
|
+
# @return [String]
|
|
26
|
+
def render_document_partials(doc, partials = [], locals = {})
|
|
27
|
+
safe_join(partials.map do |action_name|
|
|
28
|
+
render_document_partial(doc, action_name, locals)
|
|
29
|
+
end, "\n")
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
##
|
|
33
|
+
# Given a doc and a base name for a partial, this method will attempt to render
|
|
34
|
+
# an appropriate partial based on the document format and view type.
|
|
35
|
+
#
|
|
36
|
+
# If a partial that matches the document format is not found,
|
|
37
|
+
# render a default partial for the base name.
|
|
38
|
+
#
|
|
39
|
+
# @see #document_partial_path_templates
|
|
40
|
+
#
|
|
41
|
+
# @param [SolrDocument] doc
|
|
42
|
+
# @param [String] base_name base name for the partial
|
|
43
|
+
# @param [Hash] locals local variables to pass through to the partials
|
|
44
|
+
def render_document_partial(doc, base_name, locals = {})
|
|
45
|
+
format = document_partial_name(doc, base_name)
|
|
46
|
+
|
|
47
|
+
view_type = document_index_view_type
|
|
48
|
+
template = cached_view ['show', view_type, base_name, format].join('_') do
|
|
49
|
+
find_document_show_template_with_view(view_type, base_name, format, locals)
|
|
50
|
+
end
|
|
51
|
+
if template
|
|
52
|
+
template.render(self, locals.merge(document: doc))
|
|
53
|
+
else
|
|
54
|
+
''
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
##
|
|
59
|
+
# Render the document index for the given view type with the
|
|
60
|
+
# list of documents.
|
|
61
|
+
#
|
|
62
|
+
# This method will interpolate the list of templates with
|
|
63
|
+
# the current view, and gracefully handles missing templates.
|
|
64
|
+
#
|
|
65
|
+
# @see #document_index_path_templates
|
|
66
|
+
#
|
|
67
|
+
# @param [String] view type
|
|
68
|
+
# @param [Array<SolrDocument>] documents list of documents to render
|
|
69
|
+
# @param [Hash] locals to pass to the render call
|
|
70
|
+
# @return [String]
|
|
71
|
+
def render_document_index_with_view view, documents, locals = {}
|
|
72
|
+
template = cached_view ['index', view].join('_') do
|
|
73
|
+
find_document_index_template_with_view(view, locals)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
if template
|
|
77
|
+
template.render(self, locals.merge(documents: documents))
|
|
78
|
+
else
|
|
79
|
+
''
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
##
|
|
84
|
+
# A list of document partial templates to attempt to render
|
|
85
|
+
#
|
|
86
|
+
# @see #render_document_index_with_view
|
|
87
|
+
# @return [Array<String>]
|
|
88
|
+
def document_index_path_templates
|
|
89
|
+
# first, the legacy template names for backwards compatbility
|
|
90
|
+
# followed by the new, inheritable style
|
|
91
|
+
# finally, a controller-specific path for non-catalog subclasses
|
|
92
|
+
@document_index_path_templates ||= [
|
|
93
|
+
"document_%{index_view_type}",
|
|
94
|
+
"catalog/document_%{index_view_type}",
|
|
95
|
+
"catalog/document_list"
|
|
96
|
+
]
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
##
|
|
100
|
+
# Return a normalized partial name for rendering a single document
|
|
101
|
+
#
|
|
102
|
+
# @param [SolrDocument] document
|
|
103
|
+
# @param [Symbol] base_name base name for the partial
|
|
104
|
+
# @return [String]
|
|
105
|
+
def document_partial_name(document, base_name = nil)
|
|
106
|
+
view_config = blacklight_config.view_config(:show)
|
|
107
|
+
|
|
108
|
+
display_type = if base_name && view_config.key?(:"#{base_name}_display_type_field")
|
|
109
|
+
document[view_config[:"#{base_name}_display_type_field"]]
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
display_type ||= document[view_config.display_type_field]
|
|
113
|
+
|
|
114
|
+
display_type ||= 'default'
|
|
115
|
+
|
|
116
|
+
type_field_to_partial_name(document, display_type)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
private
|
|
120
|
+
|
|
121
|
+
##
|
|
122
|
+
# Return a partial name for rendering a document
|
|
123
|
+
# this method can be overridden in order to transform the value
|
|
124
|
+
# (e.g. 'PdfBook' => 'pdf_book')
|
|
125
|
+
#
|
|
126
|
+
# @param [SolrDocument] document
|
|
127
|
+
# @param [String, Array] display_type a value suggestive of a partial
|
|
128
|
+
# @return [String] the name of the partial to render
|
|
129
|
+
# @example
|
|
130
|
+
# type_field_to_partial_name(['a book-article'])
|
|
131
|
+
# => 'a_book_article'
|
|
132
|
+
def type_field_to_partial_name(_document, display_type)
|
|
133
|
+
# using "_" as sep. to more closely follow the views file naming conventions
|
|
134
|
+
# parameterize uses "-" as the default sep. which throws errors
|
|
135
|
+
underscore = '_'
|
|
136
|
+
Array(display_type).join(' ').tr('-', underscore).parameterize(separator: underscore)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
##
|
|
140
|
+
# A list of document partial templates to try to render for a document
|
|
141
|
+
#
|
|
142
|
+
# The partial names will be interpolated with the following variables:
|
|
143
|
+
# - action_name: (e.g. index, show)
|
|
144
|
+
# - index_view_type: (the current view type, e.g. list, gallery)
|
|
145
|
+
# - format: the document's format (e.g. book)
|
|
146
|
+
#
|
|
147
|
+
# @see #render_document_partial
|
|
148
|
+
def document_partial_path_templates
|
|
149
|
+
# first, the legacy template names for backwards compatbility
|
|
150
|
+
# followed by the new, inheritable style
|
|
151
|
+
# finally, a controller-specific path for non-catalog subclasses
|
|
152
|
+
@partial_path_templates ||= [
|
|
153
|
+
"%{action_name}_%{index_view_type}_%{format}",
|
|
154
|
+
"%{action_name}_%{index_view_type}_default",
|
|
155
|
+
"%{action_name}_%{format}",
|
|
156
|
+
"%{action_name}_default",
|
|
157
|
+
"%{action_name}",
|
|
158
|
+
"catalog/%{action_name}_%{format}",
|
|
159
|
+
"catalog/_%{action_name}_partials/%{format}",
|
|
160
|
+
"catalog/_%{action_name}_partials/default"
|
|
161
|
+
]
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def find_document_show_template_with_view view_type, base_name, format, locals
|
|
165
|
+
document_partial_path_templates.each do |str|
|
|
166
|
+
partial = format(str, action_name: base_name, format: format, index_view_type: view_type)
|
|
167
|
+
logger.debug "Looking for document partial #{partial}"
|
|
168
|
+
template = lookup_context.find_all(partial, lookup_context.prefixes + [""], true, locals.keys + [:document], {}).first
|
|
169
|
+
return template if template
|
|
170
|
+
end
|
|
171
|
+
nil
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def find_document_index_template_with_view view_type, locals
|
|
175
|
+
document_index_path_templates.each do |str|
|
|
176
|
+
partial = format(str, index_view_type: view_type)
|
|
177
|
+
logger.debug "Looking for document index partial #{partial}"
|
|
178
|
+
template = lookup_context.find_all(partial, lookup_context.prefixes + [""], true, locals.keys + [:documents], {}).first
|
|
179
|
+
return template if template
|
|
180
|
+
end
|
|
181
|
+
nil
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
##
|
|
185
|
+
# @param key fetches or writes data to a cache, using the given key.
|
|
186
|
+
# @yield the block to evaluate (and cache) if there is a cache miss
|
|
187
|
+
def cached_view key
|
|
188
|
+
@view_cache ||= {}
|
|
189
|
+
if @view_cache.key?(key)
|
|
190
|
+
@view_cache[key]
|
|
191
|
+
else
|
|
192
|
+
@view_cache[key] = yield
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
module Blacklight::SearchHistoryConstraintsHelperBehavior
|
|
9
9
|
# Simpler textual version of constraints, used on Search History page.
|
|
10
10
|
# Theoretically can may be DRY'd up with results page render_constraints,
|
|
11
|
-
# maybe even using the very same HTML with different CSS?
|
|
12
|
-
# But too tricky for now, too many changes to existing CSS. TODO.
|
|
11
|
+
# maybe even using the very same HTML with different CSS?
|
|
12
|
+
# But too tricky for now, too many changes to existing CSS. TODO.
|
|
13
13
|
def render_search_to_s(params)
|
|
14
14
|
render_search_to_s_q(params) +
|
|
15
15
|
render_search_to_s_filters(params)
|
|
@@ -22,7 +22,7 @@ module Blacklight::SearchHistoryConstraintsHelperBehavior
|
|
|
22
22
|
|
|
23
23
|
label = label_for_search_field(params[:search_field]) unless default_search_field && params[:search_field] == default_search_field[:key]
|
|
24
24
|
|
|
25
|
-
render_search_to_s_element(label
|
|
25
|
+
render_search_to_s_element(label, render_filter_value(params['q']))
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
##
|
|
@@ -32,24 +32,30 @@ module Blacklight::SearchHistoryConstraintsHelperBehavior
|
|
|
32
32
|
|
|
33
33
|
safe_join(params[:f].collect do |facet_field, value_list|
|
|
34
34
|
render_search_to_s_element(facet_field_label(facet_field),
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
safe_join(value_list.collect do |value|
|
|
36
|
+
render_filter_value(value, facet_field)
|
|
37
|
+
end,
|
|
38
|
+
content_tag(:span, " #{t('blacklight.and')} ", class: 'filter-separator')))
|
|
38
39
|
end, " \n ")
|
|
39
40
|
end
|
|
40
41
|
|
|
41
42
|
# value can be Array, in which case elements are joined with
|
|
42
43
|
# 'and'. Pass in option :escape_value => false to pass in pre-rendered
|
|
43
|
-
# html for value. key with escape_key if needed.
|
|
44
|
-
def render_search_to_s_element(key, value,
|
|
45
|
-
content_tag(:span,
|
|
44
|
+
# html for value. key with escape_key if needed.
|
|
45
|
+
def render_search_to_s_element(key, value, _options = {})
|
|
46
|
+
content_tag(:span,
|
|
47
|
+
render_filter_name(key) + content_tag(:span, value, class: 'filter-values'),
|
|
48
|
+
class: 'constraint')
|
|
46
49
|
end
|
|
47
50
|
|
|
48
51
|
##
|
|
49
52
|
# Render the name of the facet
|
|
50
53
|
def render_filter_name name
|
|
51
54
|
return "".html_safe if name.blank?
|
|
52
|
-
|
|
55
|
+
|
|
56
|
+
content_tag(:span,
|
|
57
|
+
t('blacklight.search.filters.label', label: name),
|
|
58
|
+
class: 'filter-name')
|
|
53
59
|
end
|
|
54
60
|
|
|
55
61
|
##
|
|
@@ -57,6 +63,8 @@ module Blacklight::SearchHistoryConstraintsHelperBehavior
|
|
|
57
63
|
def render_filter_value value, key = nil
|
|
58
64
|
display_value = value
|
|
59
65
|
display_value = facet_display_value(key, value) if key
|
|
60
|
-
content_tag(:span,
|
|
66
|
+
content_tag(:span,
|
|
67
|
+
h(display_value),
|
|
68
|
+
class: 'filter-value')
|
|
61
69
|
end
|
|
62
70
|
end
|
|
@@ -2,53 +2,61 @@
|
|
|
2
2
|
##
|
|
3
3
|
# URL helper methods
|
|
4
4
|
module Blacklight::UrlHelperBehavior
|
|
5
|
-
include Blacklight::DeprecatedUrlHelperBehavior
|
|
6
|
-
|
|
7
|
-
##
|
|
8
|
-
# Extension point for downstream applications
|
|
9
|
-
# to provide more interesting routing to
|
|
10
|
-
# documents
|
|
11
5
|
def url_for_document(doc, options = {})
|
|
12
6
|
search_state.url_for_document(doc, options)
|
|
13
7
|
end
|
|
14
8
|
|
|
15
|
-
#
|
|
16
|
-
# Use the catalog_path RESTful route to create a link to the show page for a specific item.
|
|
9
|
+
# Uses the catalog_path route to create a link to the show page for an item.
|
|
17
10
|
# catalog_path accepts a hash. The solr query params are stored in the session,
|
|
18
11
|
# 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
12
|
# TODO: move this to the IndexPresenter
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
13
|
+
# @param doc [SolrDocument] the document
|
|
14
|
+
# @param field_or_opts [Hash, String] either a string to render as the link text or options
|
|
15
|
+
# @param opts [Hash] the options to create the link with
|
|
16
|
+
# @option opts [Number] :counter (nil) the count to set in the session (for paging through a query result)
|
|
17
|
+
# @example Passing in an image
|
|
18
|
+
# link_to_document(doc, '<img src="thumbnail.png">', counter: 3) #=> "<a href=\"catalog/123\" data-tracker-href=\"/catalog/123/track?counter=3&search_id=999\"><img src="thumbnail.png"></a>
|
|
19
|
+
# @example With the default document link field
|
|
20
|
+
# link_to_document(doc, counter: 3) #=> "<a href=\"catalog/123\" data-tracker-href=\"/catalog/123/track?counter=3&search_id=999\">My Title</a>
|
|
21
|
+
def link_to_document(doc, field_or_opts = nil, opts = { counter: nil })
|
|
22
|
+
label = case field_or_opts
|
|
23
|
+
when NilClass
|
|
24
|
+
index_presenter(doc).label document_show_link_field(doc), opts
|
|
25
|
+
when Hash
|
|
26
|
+
opts = field_or_opts
|
|
27
|
+
index_presenter(doc).label document_show_link_field(doc), opts
|
|
28
|
+
when Proc, Symbol
|
|
29
|
+
Deprecation.warn(self, "passing a #{field_or_opts.class} to link_to_document is deprecated and will be removed in Blacklight 8")
|
|
30
|
+
Deprecation.silence(Blacklight::IndexPresenter) do
|
|
31
|
+
index_presenter(doc).label field_or_opts, opts
|
|
32
|
+
end
|
|
33
|
+
else # String
|
|
34
|
+
field_or_opts
|
|
35
|
+
end
|
|
26
36
|
|
|
27
|
-
field ||= document_show_link_field(doc)
|
|
28
|
-
label = index_presenter(doc).label field, opts
|
|
29
37
|
link_to label, url_for_document(doc), document_link_params(doc, opts)
|
|
30
38
|
end
|
|
31
39
|
|
|
32
40
|
def document_link_params(doc, opts)
|
|
33
41
|
session_tracking_params(doc, opts[:counter]).deep_merge(opts.except(:label, :counter))
|
|
34
42
|
end
|
|
35
|
-
|
|
43
|
+
private :document_link_params
|
|
36
44
|
|
|
37
45
|
##
|
|
38
46
|
# Link to the previous document in the current search context
|
|
39
47
|
def link_to_previous_document(previous_document)
|
|
40
|
-
link_opts = session_tracking_params(previous_document, search_session['counter'].to_i - 1).merge(:
|
|
48
|
+
link_opts = session_tracking_params(previous_document, search_session['counter'].to_i - 1).merge(class: "previous", rel: 'prev')
|
|
41
49
|
link_to_unless previous_document.nil?, raw(t('views.pagination.previous')), url_for_document(previous_document), link_opts do
|
|
42
|
-
content_tag :span, raw(t('views.pagination.previous')), :
|
|
50
|
+
content_tag :span, raw(t('views.pagination.previous')), class: 'previous'
|
|
43
51
|
end
|
|
44
52
|
end
|
|
45
53
|
|
|
46
54
|
##
|
|
47
55
|
# Link to the next document in the current search context
|
|
48
56
|
def link_to_next_document(next_document)
|
|
49
|
-
link_opts = session_tracking_params(next_document, search_session['counter'].to_i + 1).merge(:
|
|
57
|
+
link_opts = session_tracking_params(next_document, search_session['counter'].to_i + 1).merge(class: "next", rel: 'next')
|
|
50
58
|
link_to_unless next_document.nil?, raw(t('views.pagination.next')), url_for_document(next_document), link_opts do
|
|
51
|
-
content_tag :span, raw(t('views.pagination.next')), :
|
|
59
|
+
content_tag :span, raw(t('views.pagination.next')), class: 'next'
|
|
52
60
|
end
|
|
53
61
|
end
|
|
54
62
|
|
|
@@ -66,20 +74,21 @@ module Blacklight::UrlHelperBehavior
|
|
|
66
74
|
return {}
|
|
67
75
|
end
|
|
68
76
|
|
|
69
|
-
{ data: {:'context-href' => path } }
|
|
77
|
+
{ data: { :'context-href' => path } }
|
|
70
78
|
end
|
|
71
|
-
|
|
79
|
+
private :session_tracking_params
|
|
72
80
|
|
|
73
81
|
##
|
|
74
82
|
# Get the URL for tracking search sessions across pages using polymorphic routing
|
|
75
83
|
def session_tracking_path document, params = {}
|
|
76
|
-
return if document.nil?
|
|
84
|
+
return if document.nil? || controller_name == 'bookmarks'
|
|
77
85
|
|
|
78
|
-
if respond_to?(controller_tracking_method)
|
|
79
|
-
|
|
80
|
-
else
|
|
81
|
-
blacklight.track_search_context_path(params.merge(id: document))
|
|
86
|
+
if main_app.respond_to?(controller_tracking_method)
|
|
87
|
+
return main_app.public_send(controller_tracking_method, params.merge(id: document))
|
|
82
88
|
end
|
|
89
|
+
|
|
90
|
+
raise "Unable to find #{controller_tracking_method} route helper. " \
|
|
91
|
+
"Did you add `concerns :searchable` routing mixin to your `config/routes.rb`?"
|
|
83
92
|
end
|
|
84
93
|
|
|
85
94
|
def controller_tracking_method
|
|
@@ -101,7 +110,7 @@ module Blacklight::UrlHelperBehavior
|
|
|
101
110
|
# Get the path to the search action with any parameters (e.g. view type)
|
|
102
111
|
# that should be persisted across search sessions.
|
|
103
112
|
def start_over_path query_params = params
|
|
104
|
-
h = {
|
|
113
|
+
h = {}
|
|
105
114
|
current_index_view_type = document_index_view_type(query_params)
|
|
106
115
|
h[:view] = current_index_view_type unless current_index_view_type == default_document_index_view_type
|
|
107
116
|
|
|
@@ -112,23 +121,23 @@ module Blacklight::UrlHelperBehavior
|
|
|
112
121
|
# @example
|
|
113
122
|
# link_back_to_catalog(label: 'Back to Search')
|
|
114
123
|
# link_back_to_catalog(label: 'Back to Search', route_set: my_engine)
|
|
115
|
-
def link_back_to_catalog(opts={:
|
|
124
|
+
def link_back_to_catalog(opts = { label: nil })
|
|
116
125
|
scope = opts.delete(:route_set) || self
|
|
117
126
|
query_params = search_state.reset(current_search_session.try(:query_params)).to_hash
|
|
118
127
|
|
|
119
128
|
if search_session['counter']
|
|
120
|
-
per_page = (search_session['per_page'] || default_per_page).to_i
|
|
129
|
+
per_page = (search_session['per_page'] || blacklight_config.default_per_page).to_i
|
|
121
130
|
counter = search_session['counter'].to_i
|
|
122
131
|
|
|
123
|
-
query_params[:per_page] = per_page unless search_session['per_page'].to_i == default_per_page
|
|
124
|
-
query_params[:page] = ((counter - 1)/ per_page) + 1
|
|
132
|
+
query_params[:per_page] = per_page unless search_session['per_page'].to_i == blacklight_config.default_per_page
|
|
133
|
+
query_params[:page] = ((counter - 1) / per_page) + 1
|
|
125
134
|
end
|
|
126
135
|
|
|
127
136
|
link_url = if query_params.empty?
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
137
|
+
search_action_path(only_path: true)
|
|
138
|
+
else
|
|
139
|
+
scope.url_for(query_params)
|
|
140
|
+
end
|
|
132
141
|
label = opts.delete(:label)
|
|
133
142
|
|
|
134
143
|
if link_url =~ /bookmarks/
|
|
@@ -153,11 +162,11 @@ module Blacklight::UrlHelperBehavior
|
|
|
153
162
|
search_state.add_facet_params_and_redirect(group.field, group.key)
|
|
154
163
|
end
|
|
155
164
|
|
|
156
|
-
# A URL to refworks export, with an embedded callback URL to this app.
|
|
157
|
-
# the callback URL is to bookmarks#export, which delivers a list of
|
|
165
|
+
# A URL to refworks export, with an embedded callback URL to this app.
|
|
166
|
+
# the callback URL is to bookmarks#export, which delivers a list of
|
|
158
167
|
# user's bookmarks in 'refworks marc txt' format -- we tell refworks
|
|
159
|
-
# to expect that format.
|
|
168
|
+
# to expect that format.
|
|
160
169
|
def bookmarks_export_url(format, params = {})
|
|
161
|
-
bookmarks_url(params.merge(format: format, encrypted_user_id: encrypt_user_id(current_or_guest_user.id)
|
|
170
|
+
bookmarks_url(params.merge(format: format, encrypted_user_id: encrypt_user_id(current_or_guest_user.id)))
|
|
162
171
|
end
|
|
163
172
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/*global Bloodhound */
|
|
2
|
+
import Bloodhound from 'typeahead.js/dist/bloodhound.js'
|
|
2
3
|
|
|
3
4
|
Blacklight.onLoad(function() {
|
|
4
5
|
'use strict';
|
|
@@ -9,7 +10,7 @@ Blacklight.onLoad(function() {
|
|
|
9
10
|
return;
|
|
10
11
|
}
|
|
11
12
|
var suggestUrl = $el.data().autocompletePath;
|
|
12
|
-
|
|
13
|
+
|
|
13
14
|
var terms = new Bloodhound({
|
|
14
15
|
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
|
|
15
16
|
queryTokenizer: Bloodhound.tokenizers.whitespace,
|
|
@@ -18,7 +19,7 @@ Blacklight.onLoad(function() {
|
|
|
18
19
|
wildcard: '%QUERY'
|
|
19
20
|
}
|
|
20
21
|
});
|
|
21
|
-
|
|
22
|
+
|
|
22
23
|
terms.initialize();
|
|
23
24
|
|
|
24
25
|
$el.typeahead({
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
(function($) {
|
|
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';
|
|
19
|
+
|
|
20
|
+
Blacklight.onLoad(function() {
|
|
21
|
+
Blacklight.doBookmarkToggleBehavior();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
})(jQuery);
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/* A JQuery plugin (should this be implemented as a widget instead? not sure)
|
|
2
|
+
that will convert a "toggle" form, with single submit button to add/remove
|
|
3
|
+
something, like used for Bookmarks, into an AJAXy checkbox instead.
|
|
4
|
+
|
|
5
|
+
Apply to a form. Does require certain assumption about the form:
|
|
6
|
+
1) The same form 'action' href must be used for both ADD and REMOVE
|
|
7
|
+
actions, with the different being the hidden input name="_method"
|
|
8
|
+
being set to "put" or "delete" -- that's the Rails method to pretend
|
|
9
|
+
to be doing a certain HTTP verb. So same URL, PUT to add, DELETE
|
|
10
|
+
to remove. This plugin assumes that.
|
|
11
|
+
|
|
12
|
+
Plus, the form this is applied to should provide a data-doc-id
|
|
13
|
+
attribute (HTML5-style doc-*) that contains the id/primary key
|
|
14
|
+
of the object in question -- used by plugin for a unique value for
|
|
15
|
+
DOM id's.
|
|
16
|
+
|
|
17
|
+
Uses HTML for a checkbox compatible with Bootstrap 3.
|
|
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
|
+
});
|
|
30
|
+
*/
|
|
31
|
+
(function($) {
|
|
32
|
+
$.fn.blCheckboxSubmit = function(argOpts) {
|
|
33
|
+
this.each(function() {
|
|
34
|
+
var options = $.extend({}, $.fn.blCheckboxSubmit.defaults, argOpts);
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
var form = $(this);
|
|
38
|
+
form.children().hide();
|
|
39
|
+
//We're going to use the existing form to actually send our add/removes
|
|
40
|
+
//This works conveneintly because the exact same action href is used
|
|
41
|
+
//for both bookmarks/$doc_id. But let's take out the irrelevant parts
|
|
42
|
+
//of the form to avoid any future confusion.
|
|
43
|
+
form.find('input[type=submit]').remove();
|
|
44
|
+
|
|
45
|
+
//View needs to set data-doc-id so we know a unique value
|
|
46
|
+
//for making DOM id
|
|
47
|
+
var uniqueId = form.attr('data-doc-id') || Math.random();
|
|
48
|
+
// if form is currently using method delete to change state,
|
|
49
|
+
// then checkbox is currently checked
|
|
50
|
+
var checked = (form.find('input[name=_method][value=delete]').length != 0);
|
|
51
|
+
|
|
52
|
+
var checkbox = $('<input type="checkbox">')
|
|
53
|
+
.addClass( options.cssClass )
|
|
54
|
+
.attr('id', options.cssClass + '_' + uniqueId);
|
|
55
|
+
var label = $('<label>')
|
|
56
|
+
.addClass( options.cssClass )
|
|
57
|
+
.attr('for', options.cssClass + '_' + uniqueId)
|
|
58
|
+
.attr('title', form.attr('title') || '');
|
|
59
|
+
var span = $('<span>');
|
|
60
|
+
|
|
61
|
+
label.append(checkbox);
|
|
62
|
+
label.append(' ');
|
|
63
|
+
label.append(span);
|
|
64
|
+
|
|
65
|
+
var checkboxDiv = $('<div class="checkbox" />')
|
|
66
|
+
.addClass(options.cssClass)
|
|
67
|
+
.append(label);
|
|
68
|
+
|
|
69
|
+
function updateStateFor(state) {
|
|
70
|
+
checkbox.prop('checked', state);
|
|
71
|
+
label.toggleClass('checked', state);
|
|
72
|
+
if (state) {
|
|
73
|
+
//Set the Rails hidden field that fakes an HTTP verb
|
|
74
|
+
//properly for current state action.
|
|
75
|
+
form.find('input[name=_method]').val('delete');
|
|
76
|
+
span.text(form.attr('data-present'));
|
|
77
|
+
} else {
|
|
78
|
+
form.find('input[name=_method]').val('put');
|
|
79
|
+
span.text(form.attr('data-absent'));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
form.append(checkboxDiv);
|
|
84
|
+
updateStateFor(checked);
|
|
85
|
+
|
|
86
|
+
checkbox.click(function() {
|
|
87
|
+
span.text(form.attr('data-inprogress'));
|
|
88
|
+
label.attr('disabled', 'disabled');
|
|
89
|
+
checkbox.attr('disabled', 'disabled');
|
|
90
|
+
|
|
91
|
+
$.ajax({
|
|
92
|
+
url: form.attr('action'),
|
|
93
|
+
dataType: 'json',
|
|
94
|
+
type: form.attr('method').toUpperCase(),
|
|
95
|
+
data: form.serialize(),
|
|
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);
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Blacklight.onLoad(function() {
|
|
3
3
|
// when clicking on a link that toggles the collapsing behavior, don't do anything
|
|
4
4
|
// with the hash or the page could jump around.
|
|
5
|
-
$(document).on(
|
|
5
|
+
$(document).on('click', 'a[data-toggle=collapse][href="#"], [data-toggle=collapse] a[href="#"]', function(event) {
|
|
6
6
|
event.preventDefault();
|
|
7
7
|
});
|
|
8
8
|
});
|
|
@@ -19,21 +19,23 @@ Blacklight = function() {
|
|
|
19
19
|
listeners.push('turbolinks:load');
|
|
20
20
|
} else {
|
|
21
21
|
// Turbolinks < 5
|
|
22
|
-
listeners.push('page:load', '
|
|
22
|
+
listeners.push('page:load', 'DOMContentLoaded');
|
|
23
23
|
}
|
|
24
24
|
} else {
|
|
25
|
-
listeners.push('
|
|
25
|
+
listeners.push('DOMContentLoaded');
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
return listeners
|
|
28
|
+
return listeners;
|
|
29
29
|
}
|
|
30
30
|
};
|
|
31
31
|
}();
|
|
32
32
|
|
|
33
33
|
// turbolinks triggers page:load events on page transition
|
|
34
|
-
// If app isn't using turbolinks, this event will never be triggered, no prob.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
// If app isn't using turbolinks, this event will never be triggered, no prob.
|
|
35
|
+
Blacklight.listeners().forEach(function(listener) {
|
|
36
|
+
document.addEventListener(listener, function() {
|
|
37
|
+
Blacklight.activate()
|
|
38
|
+
})
|
|
39
|
+
})
|
|
39
40
|
|
|
41
|
+
$('.no-js').removeClass('no-js').addClass('js');
|