blacklight 6.24.0 → 7.0.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.npmignore +23 -0
- data/.rubocop.yml +15 -3
- data/.rubocop_todo.yml +242 -379
- data/.solr_wrapper.yml +1 -1
- data/.travis.yml +20 -24
- data/Gemfile +1 -4
- data/README.md +21 -4
- data/Rakefile +1 -2
- data/VERSION +1 -1
- 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 +496 -56
- data/app/assets/stylesheets/blacklight/_balanced_list.scss +7 -12
- data/app/assets/stylesheets/blacklight/_blacklight_base.scss +3 -1
- 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 +74 -92
- data/app/assets/stylesheets/blacklight/_header.scss +35 -48
- data/app/assets/stylesheets/blacklight/_icons.scss +29 -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_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/builders/blacklight/action_builder.rb +56 -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 +20 -37
- data/app/controllers/concerns/blacklight/catalog.rb +254 -213
- data/app/controllers/concerns/blacklight/controller.rb +117 -133
- data/app/controllers/concerns/blacklight/default_component_configuration.rb +12 -43
- data/app/controllers/concerns/blacklight/search_context.rb +10 -14
- data/app/controllers/concerns/blacklight/search_fields.rb +4 -14
- data/app/controllers/concerns/blacklight/token_based_user.rb +6 -10
- data/app/helpers/blacklight/blacklight_helper_behavior.rb +32 -118
- data/app/helpers/blacklight/catalog_helper_behavior.rb +94 -88
- data/app/helpers/blacklight/component_helper_behavior.rb +19 -19
- data/app/helpers/blacklight/configuration_helper_behavior.rb +25 -54
- data/app/helpers/blacklight/facets_helper_behavior.rb +40 -39
- data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +9 -11
- data/app/helpers/blacklight/icon_helper_behavior.rb +16 -0
- data/app/helpers/blacklight/layout_helper_behavior.rb +3 -10
- data/app/helpers/blacklight/render_constraints_helper_behavior.rb +6 -6
- data/app/helpers/blacklight/render_partials_helper_behavior.rb +195 -0
- data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +18 -11
- data/app/helpers/blacklight/suggest_helper_behavior.rb +1 -0
- data/app/helpers/blacklight/url_helper_behavior.rb +21 -27
- data/app/{assets/javascripts → javascript}/blacklight/autocomplete.js +3 -2
- data/app/javascript/blacklight/autofocus.js +20 -0
- data/app/javascript/blacklight/bookmark_toggle.js +25 -0
- data/app/javascript/blacklight/checkbox_submit.js +133 -0
- data/app/{assets/javascripts → javascript}/blacklight/collapsable.js +1 -1
- data/app/javascript/blacklight/core.js +39 -0
- data/app/{assets/javascripts → javascript}/blacklight/facet_load.js +6 -6
- data/app/{assets/javascripts/blacklight/ajax_modal.js → javascript/blacklight/modal.js} +63 -63
- data/app/{assets/javascripts → javascript}/blacklight/search_context.js +10 -2
- data/app/models/blacklight/facet_paginator.rb +3 -3
- data/app/models/blacklight/icon.rb +53 -0
- data/app/models/blacklight/solr/facet_paginator.rb +3 -3
- data/app/models/blacklight/suggest_search.rb +15 -4
- data/app/models/bookmark.rb +4 -9
- data/app/models/concerns/blacklight/configurable.rb +13 -13
- data/app/models/concerns/blacklight/document.rb +8 -42
- data/app/models/concerns/blacklight/document/active_model_shim.rb +8 -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/solr/document.rb +7 -8
- data/app/models/concerns/blacklight/suggest/response.rb +3 -5
- data/app/models/concerns/blacklight/user.rb +6 -6
- data/app/models/record_mailer.rb +5 -6
- data/app/models/search.rb +4 -7
- data/app/presenters/blacklight/field_presenter.rb +5 -5
- data/app/presenters/blacklight/index_presenter.rb +34 -71
- data/app/presenters/blacklight/json_presenter.rb +7 -4
- data/app/presenters/blacklight/link_alternate_presenter.rb +1 -1
- data/app/presenters/blacklight/rendering/abstract_step.rb +5 -5
- data/app/presenters/blacklight/rendering/helper_method.rb +8 -8
- data/app/presenters/blacklight/rendering/join.rb +3 -3
- data/app/presenters/blacklight/rendering/link_to_facet.rb +19 -19
- data/app/presenters/blacklight/rendering/microdata.rb +3 -3
- data/app/presenters/blacklight/rendering/pipeline.rb +5 -5
- data/app/presenters/blacklight/search_bar_presenter.rb +37 -0
- data/app/presenters/blacklight/show_presenter.rb +20 -69
- data/app/presenters/blacklight/thumbnail_presenter.rb +72 -0
- data/app/services/blacklight/document_factory.rb +11 -0
- data/app/services/blacklight/field_retriever.rb +24 -24
- data/app/services/blacklight/search_service.rb +154 -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 +2 -2
- data/app/views/catalog/_bookmark_control.html.erb +26 -10
- data/app/views/catalog/_citation.html.erb +18 -23
- data/app/views/catalog/_constraints.html.erb +5 -8
- data/app/views/catalog/_constraints_element.html.erb +6 -6
- data/app/views/catalog/{_document_default.atom.builder → _document.atom.builder} +2 -2
- data/app/views/catalog/_document.html.erb +5 -3
- data/app/views/catalog/{_document_default.rss.builder → _document.rss.builder} +0 -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 +3 -3
- data/app/views/catalog/_facet_layout.html.erb +5 -7
- data/app/views/catalog/_facet_limit.html.erb +3 -2
- data/app/views/catalog/_facet_pagination.html.erb +10 -10
- data/app/views/catalog/_facet_pivot.html.erb +2 -2
- data/app/views/catalog/_facets.html.erb +8 -12
- data/app/views/catalog/{_group_default.html.erb → _group.html.erb} +0 -0
- data/app/views/catalog/_home_text.html.erb +32 -36
- data/app/views/catalog/_index.html.erb +12 -0
- data/app/views/catalog/{_index_header_default.html.erb → _index_header.html.erb} +2 -2
- 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/_search_form.html.erb +12 -8
- data/app/views/catalog/_search_header.html.erb +0 -3
- data/app/views/catalog/_search_results.html.erb +4 -0
- data/app/views/catalog/_show.html.erb +10 -0
- data/app/views/catalog/{_show_header_default.html.erb → _show_header.html.erb} +0 -0
- data/app/views/catalog/_show_main_content.html.erb +4 -4
- data/app/views/catalog/_show_sidebar.html.erb +3 -3
- data/app/views/catalog/_show_tools.html.erb +9 -11
- 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/citation.html.erb +1 -1
- data/app/views/catalog/citation.js.erb +9 -1
- data/app/views/catalog/email.html.erb +5 -5
- data/app/views/catalog/email_success.html.erb +11 -9
- data/app/views/catalog/facet.html.erb +5 -6
- data/app/views/catalog/index.atom.builder +10 -15
- data/app/views/catalog/index.html.erb +9 -11
- data/app/views/catalog/index.json.jbuilder +65 -3
- data/app/views/catalog/index.rss.builder +5 -5
- data/app/views/catalog/opensearch.xml.builder +10 -10
- data/app/views/catalog/show.html.erb +11 -6
- data/app/views/catalog/sms.html.erb +2 -3
- data/app/views/catalog/sms_success.html.erb +11 -10
- 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 +4 -4
- data/app/views/kaminari/blacklight/_page.html.erb +3 -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.html.erb +14 -41
- data/app/views/layouts/blacklight/base.html.erb +43 -0
- data/app/views/layouts/catalog_result.html.erb +11 -0
- data/app/views/search_history/index.html.erb +16 -21
- data/app/views/{_flash_msg.html.erb → shared/_flash_msg.html.erb} +0 -0
- 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/locales/blacklight.de.yml +0 -30
- data/config/locales/blacklight.en.yml +1 -27
- data/config/locales/blacklight.es.yml +0 -30
- data/config/locales/blacklight.fr.yml +0 -30
- data/config/locales/blacklight.hu.yml +210 -0
- data/config/locales/blacklight.it.yml +0 -30
- data/config/locales/blacklight.nl.yml +210 -0
- data/config/locales/blacklight.pt-BR.yml +6 -32
- data/config/locales/blacklight.sq.yml +1 -28
- data/config/locales/blacklight.zh.yml +0 -25
- data/config/routes.rb +3 -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.rb +4 -5
- data/lib/blacklight/abstract_repository.rb +9 -21
- data/lib/blacklight/configuration.rb +82 -89
- data/lib/blacklight/configuration/context.rb +1 -1
- data/lib/blacklight/configuration/facet_field.rb +16 -9
- data/lib/blacklight/configuration/field.rb +32 -3
- data/lib/blacklight/configuration/fields.rb +41 -48
- 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/engine.rb +6 -10
- data/lib/blacklight/exceptions.rb +4 -7
- data/lib/blacklight/nested_open_struct_with_hash_access.rb +107 -0
- data/lib/blacklight/open_struct_with_hash_access.rb +49 -0
- data/lib/blacklight/parameters.rb +1 -1
- data/lib/blacklight/routes/searchable.rb +1 -0
- data/lib/blacklight/search_builder.rb +26 -35
- data/lib/blacklight/search_state.rb +8 -8
- data/lib/blacklight/solr/repository.rb +3 -36
- data/lib/blacklight/solr/request.rb +1 -1
- data/lib/blacklight/solr/response.rb +29 -30
- 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 +3 -3
- data/lib/blacklight/solr/search_builder_behavior.rb +25 -29
- data/lib/blacklight/version.rb +1 -1
- data/lib/generators/blacklight/assets_generator.rb +8 -8
- 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 -21
- data/lib/generators/blacklight/search_builder_generator.rb +1 -1
- data/lib/generators/blacklight/{solr5_generator.rb → solr_generator.rb} +4 -6
- data/lib/generators/blacklight/templates/.solr_wrapper.yml +5 -0
- data/lib/generators/blacklight/templates/blacklight.scss +0 -2
- data/lib/generators/blacklight/templates/catalog_controller.rb +52 -51
- 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/lib/generators/blacklight/templates/solr/conf/schema.xml +390 -0
- data/{solr → lib/generators/blacklight/templates/solr}/conf/scripts.conf +0 -0
- data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +195 -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
- data/lib/generators/blacklight/test_support_generator.rb +10 -10
- data/lib/generators/blacklight/user_generator.rb +3 -6
- data/lib/railties/blacklight.rake +19 -14
- data/package-lock.json +2057 -0
- data/package.json +28 -0
- data/spec/controllers/alternate_controller_spec.rb +1 -1
- data/spec/controllers/application_controller_spec.rb +1 -1
- data/spec/controllers/blacklight/base_spec.rb +1 -1
- data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +11 -7
- data/spec/controllers/blacklight/facet_spec.rb +1 -1
- data/spec/controllers/blacklight/search_fields_spec.rb +1 -13
- data/spec/controllers/bookmarks_controller_spec.rb +1 -36
- data/spec/controllers/catalog_controller_spec.rb +153 -53
- data/spec/controllers/search_history_controller_spec.rb +2 -2
- data/spec/features/alternate_controller_spec.rb +1 -1
- data/spec/features/autocomplete_spec.rb +2 -2
- data/spec/features/bookmarks_spec.rb +10 -10
- data/spec/features/did_you_mean_spec.rb +3 -9
- data/spec/features/facets_spec.rb +11 -11
- data/spec/features/record_view_spec.rb +1 -6
- data/spec/features/search_context_spec.rb +2 -2
- data/spec/features/search_filters_spec.rb +41 -41
- data/spec/features/search_formats_spec.rb +1 -1
- data/spec/features/search_history_spec.rb +1 -26
- data/spec/features/search_pagination_spec.rb +1 -1
- data/spec/features/search_results_spec.rb +3 -4
- data/spec/features/search_sort_spec.rb +2 -2
- data/spec/features/search_spec.rb +5 -10
- data/{solr → spec/fixtures}/sample_solr_documents.yml +688 -688
- data/spec/helpers/{configuration_helper_spec.rb → blacklight/configuration_helper_behavior_spec.rb} +70 -65
- data/spec/helpers/{facets_helper_spec.rb → blacklight/facets_helper_behavior_spec.rb} +7 -8
- data/spec/helpers/{hash_as_hidden_fields_spec.rb → blacklight/hash_as_hidden_fields_behavior_spec.rb} +1 -1
- data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +8 -0
- data/spec/helpers/{layout_helper_spec.rb → blacklight/layout_helper_behavior_spec.rb} +5 -15
- data/spec/helpers/{render_constraints_helper_spec.rb → blacklight/render_constraints_helper_behavior_spec.rb} +2 -3
- data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +80 -0
- data/spec/helpers/{search_history_constraints_helper_spec.rb → blacklight/search_history_constraints_helper_behavior_spec.rb} +9 -9
- data/spec/helpers/{suggest_helper_spec.rb → blacklight/suggest_helper_behavior_spec.rb} +4 -2
- data/spec/helpers/{url_helper_spec.rb → blacklight/url_helper_behavior_spec.rb} +11 -15
- data/spec/helpers/blacklight_helper_spec.rb +36 -141
- data/spec/helpers/catalog_helper_spec.rb +37 -56
- data/spec/integration/generators/blacklight/{solr5_generator_spec.rb → solr_generator_spec.rb} +3 -3
- data/spec/lib/blacklight/configuration/facet_field_spec.rb +11 -0
- data/spec/lib/blacklight/configuration/field_spec.rb +12 -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 +153 -0
- data/spec/lib/blacklight/parameters_spec.rb +1 -1
- data/spec/lib/blacklight/search_state_spec.rb +2 -2
- data/spec/lib/blacklight_spec.rb +1 -1
- data/spec/lib/tasks/blacklight_task_spec.rb +1 -1
- data/spec/models/blacklight/configurable_spec.rb +15 -16
- data/spec/models/blacklight/configuration/context_spec.rb +1 -1
- data/spec/models/blacklight/configuration_spec.rb +146 -135
- data/spec/models/blacklight/document/active_model_shim_spec.rb +11 -1
- data/spec/models/blacklight/document/cache_key_spec.rb +1 -1
- data/spec/models/blacklight/document/dublin_core_spec.rb +5 -5
- data/spec/models/blacklight/document/email_spec.rb +3 -3
- data/spec/models/blacklight/document/sms_spec.rb +3 -3
- data/spec/models/blacklight/document_spec.rb +3 -16
- data/spec/models/blacklight/facet_paginator_spec.rb +1 -1
- data/spec/models/blacklight/icon_spec.rb +34 -0
- data/spec/models/blacklight/search_builder_spec.rb +33 -27
- data/spec/models/blacklight/solr/document_spec.rb +18 -7
- data/spec/models/blacklight/solr/facet_paginator_spec.rb +1 -1
- data/spec/models/blacklight/solr/repository_spec.rb +32 -27
- data/spec/models/blacklight/solr/request_spec.rb +1 -1
- data/spec/models/blacklight/solr/response/facets_spec.rb +1 -1
- data/spec/models/blacklight/solr/response/group_response_spec.rb +1 -1
- data/spec/models/blacklight/solr/response/group_spec.rb +1 -1
- data/spec/models/blacklight/solr/response_spec.rb +9 -6
- data/spec/models/blacklight/solr/search_builder_spec.rb +35 -48
- data/spec/models/blacklight/suggest/response_spec.rb +4 -5
- data/spec/models/blacklight/suggest_search_spec.rb +14 -7
- data/spec/models/blacklight/user_spec.rb +1 -1
- data/spec/models/bookmark_spec.rb +1 -1
- data/spec/models/record_mailer_spec.rb +2 -2
- data/spec/models/search_spec.rb +1 -1
- data/spec/models/solr_document_spec.rb +3 -3
- data/spec/presenters/blacklight/search_bar_presenter_spec.rb +72 -0
- data/spec/presenters/index_presenter_spec.rb +70 -143
- data/spec/presenters/pipeline_spec.rb +4 -4
- data/spec/presenters/show_presenter_spec.rb +83 -145
- data/spec/presenters/thumbnail_presenter_spec.rb +171 -0
- data/spec/routing/catalog_routing_spec.rb +1 -17
- data/spec/services/blacklight/search_service_spec.rb +446 -0
- data/spec/spec_helper.rb +22 -9
- data/spec/test_app_templates/Gemfile.extra +2 -5
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +1 -1
- data/spec/views/catalog/_constraints.html.erb_spec.rb +1 -3
- data/spec/views/catalog/_constraints_element.html.erb_spec.rb +8 -8
- data/spec/views/catalog/_document.html.erb_spec.rb +7 -7
- data/spec/views/catalog/_document_list.html.erb_spec.rb +1 -1
- data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -1
- data/spec/views/catalog/_facet_layout.html.erb_spec.rb +6 -6
- data/spec/views/catalog/_facets.html.erb_spec.rb +2 -2
- data/spec/views/catalog/{_index_default.erb_spec.rb → _index.html.erb_spec.rb} +1 -1
- data/spec/views/catalog/{_index_header_default.html.erb_spec.rb → _index_header.html.erb_spec.rb} +4 -4
- data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +4 -27
- 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} +1 -1
- data/spec/views/catalog/_show_sidebar.erb_spec.rb +3 -3
- data/spec/views/catalog/_show_tools.html.erb_spec.rb +3 -3
- data/spec/views/catalog/_sort_and_per_page.html.erb_spec.rb +1 -1
- data/spec/views/catalog/{_thumbnail_default.erb_spec.rb → _thumbnail.html.erb_spec.rb} +3 -3
- data/spec/views/catalog/_view_type_group.html.erb_spec.rb +5 -1
- data/spec/views/catalog/email_success.html.erb_spec.rb +9 -0
- data/spec/views/catalog/facet.html.erb_spec.rb +1 -1
- data/spec/views/catalog/facet.json.jbuilder_spec.rb +1 -1
- data/spec/views/catalog/index.atom.builder_spec.rb +2 -2
- data/spec/views/catalog/index.html.erb_spec.rb +4 -7
- data/spec/views/catalog/index.json.jbuilder_spec.rb +66 -21
- data/spec/views/catalog/opensearch.xml.builder_spec.rb +1 -1
- data/spec/views/catalog/show.html.erb_spec.rb +2 -2
- data/spec/views/catalog/sms_success.html.erb_spec.rb +9 -0
- data/spec/views/{_user_util_links.html.erb_spec.rb → shared/_user_util_links.html.erb_spec.rb} +4 -4
- data/tasks/blacklight.rake +10 -8
- data/template.demo.rb +1 -11
- metadata +171 -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 -139
- data/app/assets/javascripts/blacklight/core.js +0 -30
- 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 -161
- 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/presenters/blacklight/document_presenter.rb +0 -153
- 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/blacklight/utils.rb +0 -183
- data/lib/generators/blacklight/solr4_generator.rb +0 -31
- data/solr/conf/schema.xml +0 -627
- data/solr/conf/solrconfig.xml +0 -411
- data/spec/controllers/blacklight/search_helper_spec.rb +0 -489
- 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/support/backport_test.rb +0 -14
|
@@ -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,20 @@
|
|
|
1
|
+
//= require blacklight/core
|
|
2
|
+
(function($) {
|
|
3
|
+
Blacklight.doSearchAutofocusFallback = function() {
|
|
4
|
+
if (typeof Blacklight.do_search_autofocus_fallback == 'function') {
|
|
5
|
+
console.warn("do_search_autofocus_fallback is deprecated. Use doSearchAutofocusFallback instead.");
|
|
6
|
+
return Blacklight.do_search_autofocus_fallback();
|
|
7
|
+
}
|
|
8
|
+
if (typeof Modernizer != 'undefined') {
|
|
9
|
+
if (Modernizr.autofocus) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
$('input[autofocus]').focus();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
Blacklight.onLoad(function() {
|
|
18
|
+
Blacklight.doSearchAutofocusFallback();
|
|
19
|
+
});
|
|
20
|
+
})(jQuery);
|
|
@@ -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,133 @@
|
|
|
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
|
+
checked_label: "Selected",
|
|
22
|
+
unchecked_label: "Select",
|
|
23
|
+
progress_label: "Saving...",
|
|
24
|
+
//cssClass is added to elements added, plus used for id base
|
|
25
|
+
cssClass: "toggle_my_kinda_form",
|
|
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]').size() != 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
|
+
alert('Error');
|
|
98
|
+
updateStateFor(checked);
|
|
99
|
+
label.removeAttr('disabled');
|
|
100
|
+
checkbox.removeAttr('disabled');
|
|
101
|
+
},
|
|
102
|
+
success: function(data, status, xhr) {
|
|
103
|
+
//if app isn't running at all, xhr annoyingly
|
|
104
|
+
//reports success with status 0.
|
|
105
|
+
if (xhr.status != 0) {
|
|
106
|
+
checked = ! checked;
|
|
107
|
+
updateStateFor(checked);
|
|
108
|
+
label.removeAttr('disabled');
|
|
109
|
+
checkbox.removeAttr('disabled');
|
|
110
|
+
options.success.call(form, checked, xhr.responseJSON);
|
|
111
|
+
} else {
|
|
112
|
+
alert('Error');
|
|
113
|
+
updateStateFor(checked);
|
|
114
|
+
label.removeAttr('disabled');
|
|
115
|
+
checkbox.removeAttr('disabled');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
return false;
|
|
121
|
+
}); //checkbox.click
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
}); //this.each
|
|
125
|
+
return this;
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
$.fn.blCheckboxSubmit.defaults = {
|
|
129
|
+
//cssClass is added to elements added, plus used for id base
|
|
130
|
+
cssClass: 'blCheckboxSubmit',
|
|
131
|
+
success: function() {} //callback
|
|
132
|
+
};
|
|
133
|
+
})(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
|
});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
Blacklight = function() {
|
|
2
|
+
var buffer = new Array;
|
|
3
|
+
return {
|
|
4
|
+
onLoad: function(func) {
|
|
5
|
+
buffer.push(func);
|
|
6
|
+
},
|
|
7
|
+
|
|
8
|
+
activate: function() {
|
|
9
|
+
for(var i = 0; i < buffer.length; i++) {
|
|
10
|
+
buffer[i].call();
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
|
|
14
|
+
listeners: function () {
|
|
15
|
+
var listeners = [];
|
|
16
|
+
if (typeof Turbolinks !== 'undefined' && Turbolinks.supported) {
|
|
17
|
+
// Turbolinks 5
|
|
18
|
+
if (Turbolinks.BrowserAdapter) {
|
|
19
|
+
listeners.push('turbolinks:load');
|
|
20
|
+
} else {
|
|
21
|
+
// Turbolinks < 5
|
|
22
|
+
listeners.push('page:load', 'ready');
|
|
23
|
+
}
|
|
24
|
+
} else {
|
|
25
|
+
listeners.push('ready');
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return listeners.join(' ');
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}();
|
|
32
|
+
|
|
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
|
+
$(document).on(Blacklight.listeners(), function() {
|
|
36
|
+
Blacklight.activate();
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
$('.no-js').removeClass('no-js').addClass('js');
|
|
@@ -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,27 @@
|
|
|
1
1
|
//= require blacklight/core
|
|
2
2
|
|
|
3
3
|
/*
|
|
4
|
-
The
|
|
4
|
+
The blacklight modal plugin can display some interactions inside a Bootstrap
|
|
5
5
|
modal window, including some multi-page interactions.
|
|
6
6
|
|
|
7
7
|
It supports unobtrusive Javascript, where a link or form that would have caused
|
|
8
8
|
a new page load is changed to display it's results inside a modal dialog,
|
|
9
9
|
by this plugin. The plugin assumes there is a Bootstrap modal div
|
|
10
|
-
on the page with id #
|
|
10
|
+
on the page with id #blacklight-modal to use as the modal -- the standard Blacklight
|
|
11
11
|
layout provides this.
|
|
12
12
|
|
|
13
13
|
To make a link or form have their results display inside a modal, add
|
|
14
|
-
`data-
|
|
14
|
+
`data-blacklight-modal="trigger"` to the link or form. (Note, form itself not submit input)
|
|
15
15
|
With Rails link_to helper, you'd do that like:
|
|
16
16
|
|
|
17
|
-
link_to something, link, :
|
|
17
|
+
link_to something, link, data: { blacklight_modal: "trigger" }
|
|
18
18
|
|
|
19
19
|
The results of the link href or form submit will be displayed inside
|
|
20
20
|
a modal -- they should include the proper HTML markup for a bootstrap modal's
|
|
21
21
|
contents. Also, you ordinarily won't want the Rails template with wrapping
|
|
22
22
|
navigational elements to be used. The Rails controller could suppress
|
|
23
23
|
the layout when a JS AJAX request is detected, OR the response
|
|
24
|
-
can include a `<div data-
|
|
24
|
+
can include a `<div data-blacklight-modal="container">` -- only the contents
|
|
25
25
|
of the container will be placed inside the modal, the rest of the
|
|
26
26
|
page will be ignored.
|
|
27
27
|
|
|
@@ -33,12 +33,12 @@
|
|
|
33
33
|
|
|
34
34
|
Link or forms inside the modal will ordinarily cause page loads
|
|
35
35
|
when they are triggered. However, if you'd like their results
|
|
36
|
-
to stay within the modal, just add `data-
|
|
36
|
+
to stay within the modal, just add `data-blacklight-modal="preserve"`
|
|
37
37
|
to the link or form.
|
|
38
38
|
|
|
39
39
|
Here's an example of what might be returned, demonstrating most of the devices available:
|
|
40
40
|
|
|
41
|
-
<div data-
|
|
41
|
+
<div data-blacklight-modal="container">
|
|
42
42
|
<div class="modal-header">
|
|
43
43
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
|
44
44
|
<h3 class="modal-title">Request Placed</h3>
|
|
@@ -46,47 +46,46 @@
|
|
|
46
46
|
|
|
47
47
|
<div class="modal-body">
|
|
48
48
|
<p>Some message</p>
|
|
49
|
-
<%= link_to "This result will still be within modal", some_link, :
|
|
49
|
+
<%= link_to "This result will still be within modal", some_link, data: { blacklight: "preserve" } %>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
53
53
|
<div class="modal-footer">
|
|
54
|
-
<%= link_to "Close the modal", request_done_path, :
|
|
54
|
+
<%= link_to "Close the modal", request_done_path, class: "submit button dialog-close", data: { dismiss: "modal" } %>
|
|
55
55
|
</div>
|
|
56
56
|
</div>
|
|
57
57
|
|
|
58
58
|
|
|
59
59
|
One additional feature. If the content returned from the AJAX modal load
|
|
60
|
-
has an element with `data-
|
|
60
|
+
has an element with `data-blacklight-modal=close`, that will trigger the modal
|
|
61
61
|
to be closed. And if this element includes a node with class "flash_messages",
|
|
62
62
|
the flash-messages node will be added to the main page inside #main-flahses.
|
|
63
63
|
|
|
64
64
|
== Events
|
|
65
65
|
|
|
66
|
-
We'll send out an event 'loaded.blacklight.
|
|
66
|
+
We'll send out an event 'loaded.blacklight.blacklight-modal' with the #blacklight-modal
|
|
67
67
|
dialog as the target, right after content is loaded into the modal but before
|
|
68
68
|
it is shown (if not already a shown modal). In an event handler, you can
|
|
69
69
|
inspect loaded content by looking inside $(this). If you call event.preventDefault(),
|
|
70
70
|
we won't 'show' the dialog (although it may already have been shown, you may want to
|
|
71
71
|
$(this).modal("hide") if you want to ensure hidden/closed.
|
|
72
72
|
|
|
73
|
-
The data-
|
|
73
|
+
The data-blacklight-modal=close behavior is implemented with this event, see for example.
|
|
74
74
|
*/
|
|
75
75
|
|
|
76
|
-
// We keep all our data in Blacklight.
|
|
76
|
+
// We keep all our data in Blacklight.modal object.
|
|
77
77
|
// Create lazily if someone else created first.
|
|
78
|
-
if (Blacklight.
|
|
79
|
-
Blacklight.
|
|
78
|
+
if (Blacklight.modal === undefined) {
|
|
79
|
+
Blacklight.modal = {};
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
|
|
83
82
|
// a Bootstrap modal div that should be already on the page hidden
|
|
84
|
-
Blacklight.
|
|
83
|
+
Blacklight.modal.modalSelector = '#blacklight-modal';
|
|
85
84
|
|
|
86
85
|
// Trigger selectors identify forms or hyperlinks that should open
|
|
87
86
|
// inside a modal dialog.
|
|
88
|
-
Blacklight.
|
|
89
|
-
Blacklight.
|
|
87
|
+
Blacklight.modal.triggerLinkSelector = 'a[data-blacklight-modal~=trigger]';
|
|
88
|
+
Blacklight.modal.triggerFormSelector = 'form[data-blacklight-modal~=trigger]';
|
|
90
89
|
|
|
91
90
|
// preserve selectors identify forms or hyperlinks that, if activated already
|
|
92
91
|
// inside a modal dialog, should have destinations remain inside the modal -- but
|
|
@@ -95,57 +94,58 @@ Blacklight.ajaxModal.triggerFormSelector = "form[data-ajax-modal~=trigger], for
|
|
|
95
94
|
// No need to repeat selectors from trigger selectors, those will already
|
|
96
95
|
// be preserved. MUST be manually prefixed with the modal selector,
|
|
97
96
|
// so they only apply to things inside a modal.
|
|
98
|
-
Blacklight.
|
|
99
|
-
Blacklight.ajaxModal.preserveFormSelector = Blacklight.ajaxModal.modalSelector + ' form[data-ajax-modal~=preserve]'
|
|
97
|
+
Blacklight.modal.preserveLinkSelector = Blacklight.modal.modalSelector + ' a[data-blacklight-modal~=preserve]';
|
|
100
98
|
|
|
101
|
-
Blacklight.
|
|
99
|
+
Blacklight.modal.containerSelector = '[data-blacklight-modal~=container]';
|
|
102
100
|
|
|
103
|
-
Blacklight.
|
|
101
|
+
Blacklight.modal.modalCloseSelector = '[data-blacklight-modal~=close]';
|
|
104
102
|
|
|
105
103
|
// Called on fatal failure of ajax load, function returns content
|
|
106
104
|
// to show to user in modal. Right now called only for extreme
|
|
107
105
|
// network errors.
|
|
108
|
-
Blacklight.
|
|
109
|
-
var contents =
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
106
|
+
Blacklight.modal.onFailure = function(data) {
|
|
107
|
+
var contents = '<div class="modal-header">' +
|
|
108
|
+
'<div class="modal-title">Network Error</div>' +
|
|
109
|
+
'<button type="button" class="blacklight-modal-close close" data-dismiss="modal" aria-label="Close">' +
|
|
110
|
+
' <span aria-hidden="true">×</span>' +
|
|
111
|
+
'</button>';
|
|
112
|
+
$(Blacklight.modal.modalSelector).find('.modal-content').html(contents);
|
|
113
|
+
$(Blacklight.modal.modalSelector).modal('show');
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
-
Blacklight.
|
|
116
|
+
Blacklight.modal.receiveAjax = function (contents) {
|
|
117
117
|
// does it have a data- selector for container?
|
|
118
118
|
// important we don't execute script tags, we shouldn't.
|
|
119
119
|
// 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.
|
|
122
|
-
if (container.
|
|
120
|
+
var container = $('<div>').
|
|
121
|
+
append( jQuery.parseHTML(contents) ).find( Blacklight.modal.containerSelector ).first();
|
|
122
|
+
if (container.size() !== 0) {
|
|
123
123
|
contents = container.html();
|
|
124
124
|
}
|
|
125
125
|
|
|
126
|
-
$(Blacklight.
|
|
126
|
+
$(Blacklight.modal.modalSelector).find('.modal-content').html(contents);
|
|
127
127
|
|
|
128
128
|
// send custom event with the modal dialog div as the target
|
|
129
|
-
var e = $.Event('loaded.blacklight.
|
|
130
|
-
$(Blacklight.
|
|
129
|
+
var e = $.Event('loaded.blacklight.blacklight-modal')
|
|
130
|
+
$(Blacklight.modal.modalSelector).trigger(e);
|
|
131
131
|
// if they did preventDefault, don't show the dialog
|
|
132
132
|
if (e.isDefaultPrevented()) return;
|
|
133
133
|
|
|
134
|
-
$(Blacklight.
|
|
134
|
+
$(Blacklight.modal.modalSelector).modal('show');
|
|
135
135
|
};
|
|
136
136
|
|
|
137
137
|
|
|
138
|
-
Blacklight.
|
|
138
|
+
Blacklight.modal.modalAjaxLinkClick = function(e) {
|
|
139
139
|
e.preventDefault();
|
|
140
140
|
|
|
141
141
|
$.ajax({
|
|
142
142
|
url: $(this).attr('href')
|
|
143
143
|
})
|
|
144
|
-
.fail(Blacklight.
|
|
145
|
-
.done(Blacklight.
|
|
144
|
+
.fail(Blacklight.modal.onFailure)
|
|
145
|
+
.done(Blacklight.modal.receiveAjax)
|
|
146
146
|
};
|
|
147
147
|
|
|
148
|
-
Blacklight.
|
|
148
|
+
Blacklight.modal.modalAjaxFormSubmit = function(e) {
|
|
149
149
|
e.preventDefault();
|
|
150
150
|
|
|
151
151
|
$.ajax({
|
|
@@ -153,54 +153,54 @@ Blacklight.ajaxModal.modalAjaxFormSubmit = function(e) {
|
|
|
153
153
|
data: $(this).serialize(),
|
|
154
154
|
type: $(this).attr('method') // POST
|
|
155
155
|
})
|
|
156
|
-
.fail(Blacklight.
|
|
157
|
-
.done(Blacklight.
|
|
156
|
+
.fail(Blacklight.modal.onFailure)
|
|
157
|
+
.done(Blacklight.modal.receiveAjax)
|
|
158
158
|
}
|
|
159
159
|
|
|
160
160
|
|
|
161
161
|
|
|
162
|
-
Blacklight.
|
|
162
|
+
Blacklight.modal.setupModal = function() {
|
|
163
163
|
// Event indicating blacklight is setting up a modal link,
|
|
164
164
|
// you can catch it and call e.preventDefault() to abort
|
|
165
165
|
// setup.
|
|
166
|
-
var e = $.Event('setup.blacklight.
|
|
167
|
-
$(
|
|
166
|
+
var e = $.Event('setup.blacklight.blacklight-modal');
|
|
167
|
+
$('body').trigger(e);
|
|
168
168
|
if (e.isDefaultPrevented()) return;
|
|
169
169
|
|
|
170
170
|
// Register both trigger and preserve selectors in ONE event handler, combining
|
|
171
171
|
// into one selector with a comma, so if something matches BOTH selectors, it
|
|
172
172
|
// still only gets the event handler called once.
|
|
173
|
-
$(
|
|
174
|
-
Blacklight.
|
|
175
|
-
$(
|
|
176
|
-
Blacklight.
|
|
173
|
+
$('body').on('click', Blacklight.modal.triggerLinkSelector + ', ' + Blacklight.modal.preserveLinkSelector,
|
|
174
|
+
Blacklight.modal.modalAjaxLinkClick);
|
|
175
|
+
$('body').on('submit', Blacklight.modal.triggerFormSelector + ', ' + Blacklight.modal.preserveFormSelector,
|
|
176
|
+
Blacklight.modal.modalAjaxFormSubmit);
|
|
177
177
|
|
|
178
|
-
// Catch our own custom loaded event to implement data-
|
|
179
|
-
$(
|
|
178
|
+
// Catch our own custom loaded event to implement data-blacklight-modal=closed
|
|
179
|
+
$('body').on('loaded.blacklight.blacklight-modal', Blacklight.modal.checkCloseModal);
|
|
180
180
|
|
|
181
181
|
// we support doing data-dismiss=modal on a <a> with a href for non-ajax
|
|
182
182
|
// use, we need to suppress following the a's href that's there for
|
|
183
183
|
// non-JS contexts.
|
|
184
|
-
$(
|
|
184
|
+
$('body').on('click', Blacklight.modal.modalSelector + ' a[data-dismiss~=modal]', function (e) {
|
|
185
185
|
e.preventDefault();
|
|
186
186
|
});
|
|
187
187
|
};
|
|
188
188
|
|
|
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
|
-
|
|
189
|
+
// A function used as an event handler on loaded.blacklight.blacklight-modal
|
|
190
|
+
// to catch contained data-blacklight-modal=closed directions
|
|
191
|
+
Blacklight.modal.checkCloseModal = function(event) {
|
|
192
|
+
if ($(event.target).find(Blacklight.modal.modalCloseSelector).length) {
|
|
193
|
+
var modalFlashes = $(this).find('.flash_messages');
|
|
194
194
|
|
|
195
|
-
$(event.target).modal(
|
|
195
|
+
$(event.target).modal('hide');
|
|
196
196
|
event.preventDefault();
|
|
197
197
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
198
|
+
var mainFlashes = $('#main-flashes');
|
|
199
|
+
mainFlashes.append(modalFlashes);
|
|
200
|
+
modalFlashes.fadeIn(500);
|
|
201
201
|
}
|
|
202
202
|
}
|
|
203
203
|
|
|
204
204
|
Blacklight.onLoad(function() {
|
|
205
|
-
Blacklight.
|
|
205
|
+
Blacklight.modal.setupModal();
|
|
206
206
|
});
|