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
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
function longer (a,b){ return b.textContent.length - a.textContent.length; }
|
|
9
9
|
|
|
10
10
|
$('ul.facet-values, ul.pivot-facet').each(function(){
|
|
11
|
-
var longest = $(this).find('span.facet-count').sort(longer)
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
var longest = $(this).find('span.facet-count').sort(longer)[0];
|
|
12
|
+
|
|
13
|
+
if (longest && longest.textContent) {
|
|
14
|
+
var width = longest.textContent.length + 1 + 'ch';
|
|
15
|
+
$(this).find('.facet-count').first().width(width);
|
|
16
|
+
}
|
|
17
17
|
});
|
|
18
18
|
};
|
|
19
19
|
|
|
@@ -1,27 +1,25 @@
|
|
|
1
|
-
//= require blacklight/core
|
|
2
|
-
|
|
3
1
|
/*
|
|
4
|
-
The
|
|
2
|
+
The blacklight modal plugin can display some interactions inside a Bootstrap
|
|
5
3
|
modal window, including some multi-page interactions.
|
|
6
4
|
|
|
7
5
|
It supports unobtrusive Javascript, where a link or form that would have caused
|
|
8
6
|
a new page load is changed to display it's results inside a modal dialog,
|
|
9
7
|
by this plugin. The plugin assumes there is a Bootstrap modal div
|
|
10
|
-
on the page with id #
|
|
8
|
+
on the page with id #blacklight-modal to use as the modal -- the standard Blacklight
|
|
11
9
|
layout provides this.
|
|
12
10
|
|
|
13
11
|
To make a link or form have their results display inside a modal, add
|
|
14
|
-
`data-
|
|
12
|
+
`data-blacklight-modal="trigger"` to the link or form. (Note, form itself not submit input)
|
|
15
13
|
With Rails link_to helper, you'd do that like:
|
|
16
14
|
|
|
17
|
-
link_to something, link, :
|
|
15
|
+
link_to something, link, data: { blacklight_modal: "trigger" }
|
|
18
16
|
|
|
19
17
|
The results of the link href or form submit will be displayed inside
|
|
20
18
|
a modal -- they should include the proper HTML markup for a bootstrap modal's
|
|
21
19
|
contents. Also, you ordinarily won't want the Rails template with wrapping
|
|
22
20
|
navigational elements to be used. The Rails controller could suppress
|
|
23
21
|
the layout when a JS AJAX request is detected, OR the response
|
|
24
|
-
can include a `<div data-
|
|
22
|
+
can include a `<div data-blacklight-modal="container">` -- only the contents
|
|
25
23
|
of the container will be placed inside the modal, the rest of the
|
|
26
24
|
page will be ignored.
|
|
27
25
|
|
|
@@ -33,12 +31,12 @@
|
|
|
33
31
|
|
|
34
32
|
Link or forms inside the modal will ordinarily cause page loads
|
|
35
33
|
when they are triggered. However, if you'd like their results
|
|
36
|
-
to stay within the modal, just add `data-
|
|
34
|
+
to stay within the modal, just add `data-blacklight-modal="preserve"`
|
|
37
35
|
to the link or form.
|
|
38
36
|
|
|
39
37
|
Here's an example of what might be returned, demonstrating most of the devices available:
|
|
40
38
|
|
|
41
|
-
<div data-
|
|
39
|
+
<div data-blacklight-modal="container">
|
|
42
40
|
<div class="modal-header">
|
|
43
41
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
|
44
42
|
<h3 class="modal-title">Request Placed</h3>
|
|
@@ -46,47 +44,46 @@
|
|
|
46
44
|
|
|
47
45
|
<div class="modal-body">
|
|
48
46
|
<p>Some message</p>
|
|
49
|
-
<%= link_to "This result will still be within modal", some_link, :
|
|
47
|
+
<%= link_to "This result will still be within modal", some_link, data: { blacklight: "preserve" } %>
|
|
50
48
|
</div>
|
|
51
49
|
|
|
52
50
|
|
|
53
51
|
<div class="modal-footer">
|
|
54
|
-
<%= link_to "Close the modal", request_done_path, :
|
|
52
|
+
<%= link_to "Close the modal", request_done_path, class: "submit button dialog-close", data: { dismiss: "modal" } %>
|
|
55
53
|
</div>
|
|
56
54
|
</div>
|
|
57
55
|
|
|
58
56
|
|
|
59
57
|
One additional feature. If the content returned from the AJAX modal load
|
|
60
|
-
has an element with `data-
|
|
58
|
+
has an element with `data-blacklight-modal=close`, that will trigger the modal
|
|
61
59
|
to be closed. And if this element includes a node with class "flash_messages",
|
|
62
60
|
the flash-messages node will be added to the main page inside #main-flahses.
|
|
63
61
|
|
|
64
62
|
== Events
|
|
65
63
|
|
|
66
|
-
We'll send out an event 'loaded.blacklight.
|
|
64
|
+
We'll send out an event 'loaded.blacklight.blacklight-modal' with the #blacklight-modal
|
|
67
65
|
dialog as the target, right after content is loaded into the modal but before
|
|
68
66
|
it is shown (if not already a shown modal). In an event handler, you can
|
|
69
67
|
inspect loaded content by looking inside $(this). If you call event.preventDefault(),
|
|
70
68
|
we won't 'show' the dialog (although it may already have been shown, you may want to
|
|
71
69
|
$(this).modal("hide") if you want to ensure hidden/closed.
|
|
72
70
|
|
|
73
|
-
The data-
|
|
71
|
+
The data-blacklight-modal=close behavior is implemented with this event, see for example.
|
|
74
72
|
*/
|
|
75
73
|
|
|
76
|
-
// We keep all our data in Blacklight.
|
|
74
|
+
// We keep all our data in Blacklight.modal object.
|
|
77
75
|
// Create lazily if someone else created first.
|
|
78
|
-
if (Blacklight.
|
|
79
|
-
Blacklight.
|
|
76
|
+
if (Blacklight.modal === undefined) {
|
|
77
|
+
Blacklight.modal = {};
|
|
80
78
|
}
|
|
81
79
|
|
|
82
|
-
|
|
83
80
|
// a Bootstrap modal div that should be already on the page hidden
|
|
84
|
-
Blacklight.
|
|
81
|
+
Blacklight.modal.modalSelector = '#blacklight-modal';
|
|
85
82
|
|
|
86
83
|
// Trigger selectors identify forms or hyperlinks that should open
|
|
87
84
|
// inside a modal dialog.
|
|
88
|
-
Blacklight.
|
|
89
|
-
Blacklight.
|
|
85
|
+
Blacklight.modal.triggerLinkSelector = 'a[data-blacklight-modal~=trigger]';
|
|
86
|
+
Blacklight.modal.triggerFormSelector = 'form[data-blacklight-modal~=trigger]';
|
|
90
87
|
|
|
91
88
|
// preserve selectors identify forms or hyperlinks that, if activated already
|
|
92
89
|
// inside a modal dialog, should have destinations remain inside the modal -- but
|
|
@@ -95,57 +92,58 @@ Blacklight.ajaxModal.triggerFormSelector = "form[data-ajax-modal~=trigger], for
|
|
|
95
92
|
// No need to repeat selectors from trigger selectors, those will already
|
|
96
93
|
// be preserved. MUST be manually prefixed with the modal selector,
|
|
97
94
|
// so they only apply to things inside a modal.
|
|
98
|
-
Blacklight.
|
|
99
|
-
Blacklight.ajaxModal.preserveFormSelector = Blacklight.ajaxModal.modalSelector + ' form[data-ajax-modal~=preserve]'
|
|
95
|
+
Blacklight.modal.preserveLinkSelector = Blacklight.modal.modalSelector + ' a[data-blacklight-modal~=preserve]';
|
|
100
96
|
|
|
101
|
-
Blacklight.
|
|
97
|
+
Blacklight.modal.containerSelector = '[data-blacklight-modal~=container]';
|
|
102
98
|
|
|
103
|
-
Blacklight.
|
|
99
|
+
Blacklight.modal.modalCloseSelector = '[data-blacklight-modal~=close]';
|
|
104
100
|
|
|
105
101
|
// Called on fatal failure of ajax load, function returns content
|
|
106
102
|
// to show to user in modal. Right now called only for extreme
|
|
107
103
|
// network errors.
|
|
108
|
-
Blacklight.
|
|
109
|
-
var contents =
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
104
|
+
Blacklight.modal.onFailure = function(data) {
|
|
105
|
+
var contents = '<div class="modal-header">' +
|
|
106
|
+
'<div class="modal-title">Network Error</div>' +
|
|
107
|
+
'<button type="button" class="blacklight-modal-close close" data-dismiss="modal" aria-label="Close">' +
|
|
108
|
+
' <span aria-hidden="true">×</span>' +
|
|
109
|
+
'</button>';
|
|
110
|
+
$(Blacklight.modal.modalSelector).find('.modal-content').html(contents);
|
|
111
|
+
$(Blacklight.modal.modalSelector).modal('show');
|
|
114
112
|
}
|
|
115
113
|
|
|
116
|
-
Blacklight.
|
|
114
|
+
Blacklight.modal.receiveAjax = function (contents) {
|
|
117
115
|
// does it have a data- selector for container?
|
|
118
116
|
// important we don't execute script tags, we shouldn't.
|
|
119
117
|
// code modelled off of JQuery ajax.load. https://github.com/jquery/jquery/blob/master/src/ajax/load.js?source=c#L62
|
|
120
|
-
var container = $(
|
|
121
|
-
append( jQuery.parseHTML(contents) ).find( Blacklight.
|
|
118
|
+
var container = $('<div>').
|
|
119
|
+
append( jQuery.parseHTML(contents) ).find( Blacklight.modal.containerSelector ).first();
|
|
122
120
|
if (container.length !== 0) {
|
|
123
121
|
contents = container.html();
|
|
124
122
|
}
|
|
125
123
|
|
|
126
|
-
$(Blacklight.
|
|
124
|
+
$(Blacklight.modal.modalSelector).find('.modal-content').html(contents);
|
|
127
125
|
|
|
128
126
|
// send custom event with the modal dialog div as the target
|
|
129
|
-
var e = $.Event('loaded.blacklight.
|
|
130
|
-
$(Blacklight.
|
|
127
|
+
var e = $.Event('loaded.blacklight.blacklight-modal')
|
|
128
|
+
$(Blacklight.modal.modalSelector).trigger(e);
|
|
131
129
|
// if they did preventDefault, don't show the dialog
|
|
132
130
|
if (e.isDefaultPrevented()) return;
|
|
133
131
|
|
|
134
|
-
$(Blacklight.
|
|
132
|
+
$(Blacklight.modal.modalSelector).modal('show');
|
|
135
133
|
};
|
|
136
134
|
|
|
137
135
|
|
|
138
|
-
Blacklight.
|
|
136
|
+
Blacklight.modal.modalAjaxLinkClick = function(e) {
|
|
139
137
|
e.preventDefault();
|
|
140
138
|
|
|
141
139
|
$.ajax({
|
|
142
140
|
url: $(this).attr('href')
|
|
143
141
|
})
|
|
144
|
-
.fail(Blacklight.
|
|
145
|
-
.done(Blacklight.
|
|
142
|
+
.fail(Blacklight.modal.onFailure)
|
|
143
|
+
.done(Blacklight.modal.receiveAjax)
|
|
146
144
|
};
|
|
147
145
|
|
|
148
|
-
Blacklight.
|
|
146
|
+
Blacklight.modal.modalAjaxFormSubmit = function(e) {
|
|
149
147
|
e.preventDefault();
|
|
150
148
|
|
|
151
149
|
$.ajax({
|
|
@@ -153,54 +151,54 @@ Blacklight.ajaxModal.modalAjaxFormSubmit = function(e) {
|
|
|
153
151
|
data: $(this).serialize(),
|
|
154
152
|
type: $(this).attr('method') // POST
|
|
155
153
|
})
|
|
156
|
-
.fail(Blacklight.
|
|
157
|
-
.done(Blacklight.
|
|
154
|
+
.fail(Blacklight.modal.onFailure)
|
|
155
|
+
.done(Blacklight.modal.receiveAjax)
|
|
158
156
|
}
|
|
159
157
|
|
|
160
158
|
|
|
161
159
|
|
|
162
|
-
Blacklight.
|
|
160
|
+
Blacklight.modal.setupModal = function() {
|
|
163
161
|
// Event indicating blacklight is setting up a modal link,
|
|
164
162
|
// you can catch it and call e.preventDefault() to abort
|
|
165
163
|
// setup.
|
|
166
|
-
var e = $.Event('setup.blacklight.
|
|
167
|
-
$(
|
|
164
|
+
var e = $.Event('setup.blacklight.blacklight-modal');
|
|
165
|
+
$('body').trigger(e);
|
|
168
166
|
if (e.isDefaultPrevented()) return;
|
|
169
167
|
|
|
170
168
|
// Register both trigger and preserve selectors in ONE event handler, combining
|
|
171
169
|
// into one selector with a comma, so if something matches BOTH selectors, it
|
|
172
170
|
// still only gets the event handler called once.
|
|
173
|
-
$(
|
|
174
|
-
Blacklight.
|
|
175
|
-
$(
|
|
176
|
-
Blacklight.
|
|
171
|
+
$('body').on('click', Blacklight.modal.triggerLinkSelector + ', ' + Blacklight.modal.preserveLinkSelector,
|
|
172
|
+
Blacklight.modal.modalAjaxLinkClick);
|
|
173
|
+
$('body').on('submit', Blacklight.modal.triggerFormSelector + ', ' + Blacklight.modal.preserveFormSelector,
|
|
174
|
+
Blacklight.modal.modalAjaxFormSubmit);
|
|
177
175
|
|
|
178
|
-
// Catch our own custom loaded event to implement data-
|
|
179
|
-
$(
|
|
176
|
+
// Catch our own custom loaded event to implement data-blacklight-modal=closed
|
|
177
|
+
$('body').on('loaded.blacklight.blacklight-modal', Blacklight.modal.checkCloseModal);
|
|
180
178
|
|
|
181
179
|
// we support doing data-dismiss=modal on a <a> with a href for non-ajax
|
|
182
180
|
// use, we need to suppress following the a's href that's there for
|
|
183
181
|
// non-JS contexts.
|
|
184
|
-
$(
|
|
182
|
+
$('body').on('click', Blacklight.modal.modalSelector + ' a[data-dismiss~=modal]', function (e) {
|
|
185
183
|
e.preventDefault();
|
|
186
184
|
});
|
|
187
185
|
};
|
|
188
186
|
|
|
189
|
-
// A function used as an event handler on loaded.blacklight.
|
|
190
|
-
// to catch contained data-
|
|
191
|
-
Blacklight.
|
|
192
|
-
if ($(event.target).find(Blacklight.
|
|
193
|
-
|
|
187
|
+
// A function used as an event handler on loaded.blacklight.blacklight-modal
|
|
188
|
+
// to catch contained data-blacklight-modal=closed directions
|
|
189
|
+
Blacklight.modal.checkCloseModal = function(event) {
|
|
190
|
+
if ($(event.target).find(Blacklight.modal.modalCloseSelector).length) {
|
|
191
|
+
var modalFlashes = $(this).find('.flash_messages');
|
|
194
192
|
|
|
195
|
-
$(event.target).modal(
|
|
193
|
+
$(event.target).modal('hide');
|
|
196
194
|
event.preventDefault();
|
|
197
195
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
196
|
+
var mainFlashes = $('#main-flashes');
|
|
197
|
+
mainFlashes.append(modalFlashes);
|
|
198
|
+
modalFlashes.fadeIn(500);
|
|
201
199
|
}
|
|
202
200
|
}
|
|
203
201
|
|
|
204
202
|
Blacklight.onLoad(function() {
|
|
205
|
-
Blacklight.
|
|
203
|
+
Blacklight.modal.setupModal();
|
|
206
204
|
});
|
|
@@ -1,12 +1,19 @@
|
|
|
1
|
-
//= require blacklight/core
|
|
2
1
|
(function($) {
|
|
3
|
-
Blacklight.
|
|
2
|
+
Blacklight.doSearchContextBehavior = function() {
|
|
3
|
+
if (typeof Blacklight.do_search_context_behavior == 'function') {
|
|
4
|
+
console.warn("do_search_context_behavior is deprecated. Use doSearchContextBehavior instead.");
|
|
5
|
+
return Blacklight.do_search_context_behavior();
|
|
6
|
+
}
|
|
4
7
|
$('a[data-context-href]').on('click.search-context', Blacklight.handleSearchContextMethod);
|
|
5
8
|
};
|
|
6
9
|
|
|
7
10
|
// this is the $.rails.handleMethod with a couple adjustments, described inline:
|
|
8
11
|
// first, we're attaching this directly to the event handler, so we can check for meta-keys
|
|
9
12
|
Blacklight.handleSearchContextMethod = function(event) {
|
|
13
|
+
if (typeof Blacklight.handle_search_context_method == 'function') {
|
|
14
|
+
console.warn("handle_search_context_method is deprecated. Use handleSearchContextMethod instead.");
|
|
15
|
+
return Blacklight.handle_search_context_method(event);
|
|
16
|
+
}
|
|
10
17
|
var link = $(this);
|
|
11
18
|
|
|
12
19
|
// instead of using the normal href, we need to use the context href instead
|
|
@@ -37,6 +44,6 @@
|
|
|
37
44
|
};
|
|
38
45
|
|
|
39
46
|
Blacklight.onLoad(function() {
|
|
40
|
-
|
|
47
|
+
Blacklight.doSearchContextBehavior();
|
|
41
48
|
});
|
|
42
49
|
})(jQuery);
|
|
@@ -4,7 +4,7 @@ module Blacklight
|
|
|
4
4
|
# displayable. You have to ask Solr for limit+1, to get enough
|
|
5
5
|
# results to see if 'more' are available'. That is, the all_facet_values
|
|
6
6
|
# arg in constructor should be the result of asking solr for limit+1
|
|
7
|
-
# values.
|
|
7
|
+
# values.
|
|
8
8
|
# This is a workaround for the fact that Solr itself can't compute
|
|
9
9
|
# the total values for a given facet field,
|
|
10
10
|
# so we cannot know how many "pages" there are.
|
|
@@ -24,9 +24,9 @@ module Blacklight
|
|
|
24
24
|
# asking solr for n+1 facet values.
|
|
25
25
|
# options:
|
|
26
26
|
# :limit => number to display per page, or (default) ?. Nil means
|
|
27
|
-
# display all with no previous or next.
|
|
27
|
+
# display all with no previous or next.
|
|
28
28
|
# :offset => current item offset, default 0
|
|
29
|
-
# :sort => 'count' or 'index', solr tokens for facet value sorting, default 'count'.
|
|
29
|
+
# :sort => 'count' or 'index', solr tokens for facet value sorting, default 'count'.
|
|
30
30
|
def initialize(all_facet_values, arguments = {})
|
|
31
31
|
# to_s.to_i will conveniently default to 0 if nil
|
|
32
32
|
@offset = arguments[:offset].to_s.to_i
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
class Icon
|
|
5
|
+
attr_reader :icon_name
|
|
6
|
+
##
|
|
7
|
+
# @param [String, Symbol] icon_name
|
|
8
|
+
# @param [Hash] options
|
|
9
|
+
# @param [String] classes additional classes separated by a string
|
|
10
|
+
def initialize(icon_name, classes: '')
|
|
11
|
+
@icon_name = icon_name
|
|
12
|
+
@classes = classes
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
##
|
|
16
|
+
# Returns the raw source, but you could extend this to add additional attributes
|
|
17
|
+
# @return [String]
|
|
18
|
+
def svg
|
|
19
|
+
file_source
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
##
|
|
23
|
+
# @return [Hash]
|
|
24
|
+
def options
|
|
25
|
+
{
|
|
26
|
+
class: classes
|
|
27
|
+
}
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
##
|
|
31
|
+
# @return [String]
|
|
32
|
+
def path
|
|
33
|
+
"blacklight/#{icon_name}.svg"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
##
|
|
37
|
+
# @return [String]
|
|
38
|
+
def file_source
|
|
39
|
+
raise Blacklight::Exceptions::IconNotFound, "Could not find #{path}" if file.blank?
|
|
40
|
+
|
|
41
|
+
file.source.force_encoding('UTF-8')
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
|
|
46
|
+
def file
|
|
47
|
+
# Rails.application.assets is `nil` in production mode (where compile assets is enabled).
|
|
48
|
+
# This workaround is based off of this comment: https://github.com/fphilipe/premailer-rails/issues/145#issuecomment-225992564
|
|
49
|
+
(Rails.application.assets || ::Sprockets::Railtie.build_environment(Rails.application)).find_asset(path)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def classes
|
|
53
|
+
" blacklight-icons #{@classes} ".strip
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -4,7 +4,7 @@ module Blacklight::Solr
|
|
|
4
4
|
# displayable. You have to ask Solr for limit+1, to get enough
|
|
5
5
|
# results to see if 'more' are available'. That is, the all_facet_values
|
|
6
6
|
# arg in constructor should be the result of asking solr for limit+1
|
|
7
|
-
# values.
|
|
7
|
+
# values.
|
|
8
8
|
# This is a workaround for the fact that Solr itself can't compute
|
|
9
9
|
# the total values for a given facet field,
|
|
10
10
|
# so we cannot know how many "pages" there are.
|
|
@@ -14,9 +14,9 @@ module Blacklight::Solr
|
|
|
14
14
|
# asking solr for n+1 facet values.
|
|
15
15
|
# options:
|
|
16
16
|
# :limit => number to display per page, or (default) nil. Nil means
|
|
17
|
-
# display all with no previous or next.
|
|
17
|
+
# display all with no previous or next.
|
|
18
18
|
# :offset => current item offset, default 0
|
|
19
|
-
# :sort => 'count' or 'index', solr tokens for facet value sorting, default 'count'.
|
|
19
|
+
# :sort => 'count' or 'index', solr tokens for facet value sorting, default 'count'.
|
|
20
20
|
def initialize(all_facet_values, arguments = {})
|
|
21
21
|
super
|
|
22
22
|
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Blacklight
|
|
3
4
|
class SuggestSearch
|
|
4
5
|
attr_reader :request_params, :repository
|
|
5
|
-
|
|
6
|
+
|
|
6
7
|
##
|
|
7
8
|
# @param [Hash] params
|
|
9
|
+
# @param [Blacklight::AbstractRepository] repository
|
|
8
10
|
def initialize(params, repository)
|
|
9
11
|
@request_params = { q: params[:q] }
|
|
10
12
|
@repository = repository
|
|
@@ -15,20 +17,7 @@ module Blacklight
|
|
|
15
17
|
# Blacklight::Suggest::Response
|
|
16
18
|
# @return [Blacklight::Suggest::Response]
|
|
17
19
|
def suggestions
|
|
18
|
-
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
##
|
|
22
|
-
# Query the suggest handler using RSolr::Client::send_and_receive
|
|
23
|
-
# @return [RSolr::HashWithResponse]
|
|
24
|
-
def suggest_results
|
|
25
|
-
repository.connection.send_and_receive(suggest_handler_path, params: request_params)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
##
|
|
29
|
-
# @return [String]
|
|
30
|
-
def suggest_handler_path
|
|
31
|
-
repository.blacklight_config.autocomplete_path
|
|
20
|
+
repository.suggestions(request_params)
|
|
32
21
|
end
|
|
33
22
|
end
|
|
34
23
|
end
|
data/app/models/bookmark.rb
CHANGED
|
@@ -1,27 +1,22 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
|
|
3
|
+
class Bookmark < ApplicationRecord
|
|
4
4
|
belongs_to :user, polymorphic: true
|
|
5
5
|
belongs_to :document, polymorphic: true
|
|
6
6
|
|
|
7
7
|
validates :user_id, presence: true
|
|
8
8
|
|
|
9
|
-
if Blacklight::Utils.needs_attr_accessible?
|
|
10
|
-
attr_accessible :id, :document_id, :document_type, :title
|
|
11
|
-
end
|
|
12
|
-
|
|
13
9
|
def document
|
|
14
10
|
document_type.new document_type.unique_key => document_id
|
|
15
11
|
end
|
|
16
|
-
|
|
12
|
+
|
|
17
13
|
def document_type
|
|
18
14
|
value = super if defined?(super)
|
|
19
15
|
value &&= value.constantize
|
|
20
|
-
value
|
|
16
|
+
value || default_document_type
|
|
21
17
|
end
|
|
22
|
-
|
|
18
|
+
|
|
23
19
|
def default_document_type
|
|
24
20
|
SolrDocument
|
|
25
21
|
end
|
|
26
|
-
|
|
27
22
|
end
|
|
@@ -5,32 +5,32 @@ module Blacklight::Configurable
|
|
|
5
5
|
included do
|
|
6
6
|
helper_method :blacklight_config if respond_to? :helper_method
|
|
7
7
|
end
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
#instance methods for blacklight_config, so get a deep copy of the class-level config
|
|
10
10
|
def blacklight_config
|
|
11
11
|
@blacklight_config ||= self.class.blacklight_config.deep_copy
|
|
12
12
|
end
|
|
13
13
|
attr_writer :blacklight_config
|
|
14
14
|
|
|
15
|
-
module ClassMethods
|
|
15
|
+
module ClassMethods
|
|
16
16
|
def copy_blacklight_config_from(other_class)
|
|
17
|
-
self.blacklight_config = other_class.blacklight_config.inheritable_copy
|
|
17
|
+
self.blacklight_config = other_class.blacklight_config.inheritable_copy(self)
|
|
18
18
|
end
|
|
19
|
-
|
|
19
|
+
|
|
20
20
|
# lazy load a deep_copy of superclass if present, else
|
|
21
|
-
# a default_configuration, which will be legacy load or new empty config.
|
|
21
|
+
# a default_configuration, which will be legacy load or new empty config.
|
|
22
22
|
# note the @blacklight_config variable is a ruby 'instance method on class
|
|
23
23
|
# object' that won't be automatically available to subclasses, that's why
|
|
24
|
-
# we lazy load to 'inherit' how we want.
|
|
24
|
+
# we lazy load to 'inherit' how we want.
|
|
25
25
|
def blacklight_config
|
|
26
26
|
@blacklight_config ||= if superclass.respond_to?(:blacklight_config)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
superclass.blacklight_config.build(self)
|
|
28
|
+
else
|
|
29
|
+
default_configuration
|
|
30
|
+
end
|
|
31
31
|
end
|
|
32
32
|
attr_writer :blacklight_config
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
#simply a convenience method for blacklight_config.configure
|
|
35
35
|
def configure_blacklight(*args, &block)
|
|
36
36
|
blacklight_config.configure(*args, &block)
|
|
@@ -39,12 +39,12 @@ module Blacklight::Configurable
|
|
|
39
39
|
##
|
|
40
40
|
# The default configuration object
|
|
41
41
|
def default_configuration
|
|
42
|
-
Blacklight::Configurable.default_configuration.inheritable_copy
|
|
42
|
+
Blacklight::Configurable.default_configuration.inheritable_copy(self)
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
def self.default_configuration
|
|
47
|
-
|
|
47
|
+
@default_configuration ||= Blacklight::Configuration.new
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
def self.default_configuration= config
|
|
@@ -8,6 +8,11 @@ module Blacklight::Document
|
|
|
8
8
|
include ::ActiveModel::Conversion
|
|
9
9
|
|
|
10
10
|
module ClassMethods
|
|
11
|
+
# This is actually an ActiveRecord method starting in Rails 5.2
|
|
12
|
+
def polymorphic_name
|
|
13
|
+
base_class.name
|
|
14
|
+
end
|
|
15
|
+
|
|
11
16
|
def primary_key
|
|
12
17
|
unique_key
|
|
13
18
|
end
|
|
@@ -24,27 +29,24 @@ module Blacklight::Document
|
|
|
24
29
|
repository.find(id).documents.first
|
|
25
30
|
end
|
|
26
31
|
end
|
|
27
|
-
|
|
32
|
+
|
|
28
33
|
##
|
|
29
34
|
# Unique ID for the document
|
|
30
35
|
def id
|
|
31
36
|
self[self.class.unique_key]
|
|
32
37
|
end
|
|
33
38
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
def ==(other)
|
|
40
|
+
super ||
|
|
41
|
+
(other.instance_of?(self.class) &&
|
|
42
|
+
id &&
|
|
43
|
+
other.id == id)
|
|
38
44
|
end
|
|
39
|
-
|
|
45
|
+
|
|
40
46
|
def _read_attribute(attr)
|
|
41
47
|
self[attr]
|
|
42
48
|
end
|
|
43
49
|
|
|
44
|
-
def as_json(options = nil)
|
|
45
|
-
_source.as_json(options)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
50
|
##
|
|
49
51
|
# ActiveRecord::Persistence method stubs to get non-AR objects to
|
|
50
52
|
# play nice with e.g. Blacklight's bookmarks
|
|
@@ -55,7 +57,7 @@ module Blacklight::Document
|
|
|
55
57
|
def destroyed?
|
|
56
58
|
false
|
|
57
59
|
end
|
|
58
|
-
|
|
60
|
+
|
|
59
61
|
def new_record?
|
|
60
62
|
false
|
|
61
63
|
end
|
|
@@ -9,7 +9,7 @@ module Blacklight::Document::CacheKey
|
|
|
9
9
|
def cache_key
|
|
10
10
|
if new_record?
|
|
11
11
|
"#{self.class.model_name.cache_key}/new"
|
|
12
|
-
elsif
|
|
12
|
+
elsif key? cache_version_key
|
|
13
13
|
cache_version_value = self[cache_version_key]
|
|
14
14
|
"#{self.class.model_name.cache_key}/#{id}-#{Array(cache_version_value).join}"
|
|
15
15
|
else
|
|
@@ -5,7 +5,7 @@ require 'builder'
|
|
|
5
5
|
module Blacklight::Document::DublinCore
|
|
6
6
|
def self.extended(document)
|
|
7
7
|
# Register our exportable formats
|
|
8
|
-
Blacklight::Document::DublinCore.register_export_formats(
|
|
8
|
+
Blacklight::Document::DublinCore.register_export_formats(document)
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
def self.register_export_formats(document)
|
|
@@ -26,7 +26,7 @@ module Blacklight::Document::DublinCore
|
|
|
26
26
|
'xmlns:dc' => "http://purl.org/dc/elements/1.1/",
|
|
27
27
|
'xmlns:xsi' => "http://www.w3.org/2001/XMLSchema-instance",
|
|
28
28
|
'xsi:schemaLocation' => %(http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd)) do
|
|
29
|
-
|
|
29
|
+
to_semantic_values.select { |field, _values| dublin_core_field_name? field }.each do |field, values|
|
|
30
30
|
Array.wrap(values).each do |v|
|
|
31
31
|
xml.tag! "dc:#{field}", v
|
|
32
32
|
end
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module Blacklight::Document::Email
|
|
4
4
|
# Return a text string that will be the body of the email
|
|
5
5
|
def to_email_text
|
|
6
|
-
semantics =
|
|
6
|
+
semantics = to_semantic_values
|
|
7
7
|
body = []
|
|
8
8
|
body << I18n.t('blacklight.email.text.title', value: semantics[:title].join(" ")) unless semantics[:title].blank?
|
|
9
9
|
body << I18n.t('blacklight.email.text.author', value: semantics[:author].join(" ")) unless semantics[:author].blank?
|