blacklight 7.1.0 → 7.2.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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.jshintrc +3 -1
  3. data/.rubocop_todo.yml +8 -8
  4. data/.travis.yml +13 -13
  5. data/CONTRIBUTING.md +3 -1
  6. data/Gemfile +2 -0
  7. data/VERSION +1 -1
  8. data/app/assets/images/blacklight/list.svg +1 -1
  9. data/app/assets/images/blacklight/search.svg +1 -1
  10. data/app/assets/javascripts/blacklight/blacklight.js +82 -70
  11. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +17 -13
  12. data/app/assets/stylesheets/blacklight/_facets.scss +3 -0
  13. data/app/assets/stylesheets/blacklight/_header.scss +26 -0
  14. data/app/assets/stylesheets/blacklight/_icons.scss +6 -6
  15. data/app/assets/stylesheets/blacklight/_mixins.scss +3 -3
  16. data/app/controllers/concerns/blacklight/facet.rb +1 -7
  17. data/app/helpers/blacklight/catalog_helper_behavior.rb +16 -17
  18. data/app/helpers/blacklight/layout_helper_behavior.rb +2 -2
  19. data/app/helpers/blacklight/url_helper_behavior.rb +1 -1
  20. data/app/javascript/blacklight/button_focus.js +9 -0
  21. data/app/javascript/blacklight/facet_load.js +18 -19
  22. data/app/javascript/blacklight/search_context.js +67 -49
  23. data/app/models/blacklight/icon.rb +26 -5
  24. data/app/presenters/blacklight/search_bar_presenter.rb +3 -1
  25. data/app/views/catalog/_bookmark_control.html.erb +11 -13
  26. data/app/views/catalog/_facet_group.html.erb +1 -1
  27. data/app/views/catalog/_facet_layout.html.erb +9 -2
  28. data/app/views/catalog/_facets.html.erb +1 -1
  29. data/app/views/catalog/_per_page_widget.html.erb +1 -1
  30. data/app/views/catalog/_search_form.html.erb +1 -1
  31. data/app/views/catalog/_search_results.html.erb +4 -0
  32. data/app/views/catalog/_sort_widget.html.erb +1 -1
  33. data/app/views/layouts/blacklight.html.erb +2 -2
  34. data/app/views/layouts/blacklight/base.html.erb +14 -8
  35. data/config/locales/blacklight.de.yml +17 -2
  36. data/config/locales/blacklight.en.yml +17 -2
  37. data/config/locales/blacklight.es.yml +17 -2
  38. data/config/locales/blacklight.fr.yml +17 -2
  39. data/config/locales/blacklight.hu.yml +17 -3
  40. data/config/locales/blacklight.it.yml +17 -2
  41. data/config/locales/blacklight.nl.yml +17 -3
  42. data/config/locales/blacklight.pt-BR.yml +17 -2
  43. data/config/locales/blacklight.sq.yml +17 -2
  44. data/config/locales/blacklight.zh.yml +17 -3
  45. data/lib/blacklight/configuration.rb +6 -0
  46. data/lib/blacklight/engine.rb +5 -4
  47. data/lib/blacklight/solr.rb +2 -0
  48. data/{app/models/concerns → lib}/blacklight/solr/document.rb +0 -0
  49. data/{app/models → lib}/blacklight/solr/facet_paginator.rb +0 -0
  50. data/lib/blacklight/solr/response/group_response.rb +10 -0
  51. data/lib/blacklight/solr/response/pagination_methods.rb +12 -0
  52. data/lib/generators/blacklight/assets_generator.rb +4 -1
  53. data/package-lock.json +1 -1
  54. data/package.json +2 -2
  55. data/spec/features/facets_spec.rb +22 -1
  56. data/spec/features/search_filters_spec.rb +25 -5
  57. data/spec/helpers/blacklight/layout_helper_behavior_spec.rb +4 -4
  58. data/spec/helpers/catalog_helper_spec.rb +0 -9
  59. data/spec/models/blacklight/icon_spec.rb +25 -1
  60. data/spec/models/blacklight/solr/response/group_response_spec.rb +13 -0
  61. data/spec/models/blacklight/solr/response_spec.rb +3 -0
  62. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +15 -0
  63. data/spec/views/catalog/_facet_group.html.erb_spec.rb +82 -0
  64. data/spec/views/catalog/_facet_layout.html.erb_spec.rb +1 -1
  65. data/spec/views/catalog/_facets.html.erb_spec.rb +5 -66
  66. metadata +7 -5
  67. data/app/javascript/blacklight/collapsable.js +0 -9
@@ -63,6 +63,19 @@ RSpec.describe Blacklight::Solr::Response::GroupResponse, api: true do
63
63
  expect(group.empty?).to be false
64
64
  end
65
65
  end
66
+
67
+ describe "entry_name" do
68
+ it "accesses a custom field grouped i18n key" do
69
+ allow(I18n).to receive(:t).with(
70
+ 'blacklight.entry_name.grouped.result_group_ssi',
71
+ default: :'blacklight.entry_name.grouped.default'
72
+ ).and_return('cool group')
73
+ expect(group.entry_name(count: 2)).to eq 'cool groups'
74
+ end
75
+ it "falls back to default group key" do
76
+ expect(group.entry_name(count: 2)).to eq 'grouped results'
77
+ end
78
+ end
66
79
  end
67
80
 
68
81
  def create_response(response, params = {})
@@ -66,6 +66,9 @@ RSpec.describe Blacklight::Solr::Response, api: true do
66
66
  expect(r.total_count).to eq(r.total)
67
67
  expect(r.next_page).to eq(r.current_page + 1)
68
68
  expect(r.prev_page).to eq(nil)
69
+ expect(r.entry_name(count: 1)).to eq 'entry'
70
+ expect(r.entry_name(count: 2)).to eq 'entries'
71
+ expect(r.size).to eq 26
69
72
  if Kaminari.config.respond_to? :max_pages
70
73
  expect(r.max_pages).to be_nil
71
74
  end
@@ -46,6 +46,12 @@ RSpec.describe Blacklight::SearchBarPresenter do
46
46
  subject { presenter.autofocus? }
47
47
 
48
48
  context "on a catalog-like index page without query or facet parameters" do
49
+ let(:blacklight_config) do
50
+ Blacklight::Configuration.new.configure do |config|
51
+ config.enable_search_bar_autofocus = true
52
+ end
53
+ end
54
+
49
55
  before do
50
56
  allow(controller).to receive(:action_name).and_return('index')
51
57
  allow(controller).to receive(:has_search_parameters?).and_return(false)
@@ -54,6 +60,15 @@ RSpec.describe Blacklight::SearchBarPresenter do
54
60
  it { is_expected.to be true }
55
61
  end
56
62
 
63
+ context "when disabled in config" do
64
+ before do
65
+ allow(controller).to receive(:action_name).and_return('index')
66
+ allow(controller).to receive(:has_search_parameters?).and_return(false)
67
+ end
68
+
69
+ it { is_expected.to be false }
70
+ end
71
+
57
72
  context "when not the catalog controller" do
58
73
  let(:controller) { ApplicationController.new }
59
74
 
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe "catalog/_facet_group" do
4
+ let(:blacklight_config) { Blacklight::Configuration.new }
5
+
6
+ before do
7
+ allow(view).to receive_messages(blacklight_config: blacklight_config)
8
+ allow(view).to receive(:search_action_path).and_return('/catalog')
9
+ end
10
+
11
+ context "without any facet fields" do
12
+ before do
13
+ allow(view).to receive_messages(groupname: nil, render_facet_partials: '')
14
+ render
15
+ end
16
+
17
+ it "does not have a header if no facets are displayed" do
18
+ expect(rendered).not_to have_selector('h4')
19
+ end
20
+ end
21
+
22
+ context "with facet groups" do
23
+ let :facet_field do
24
+ Blacklight::Configuration::FacetField.new(field: 'facet_field_1', label: 'label', group: nil).normalize!
25
+ end
26
+
27
+ let(:mock_display_facet1) do
28
+ double(name: 'facet_field_1', sort: nil, offset: nil, prefix: nil, items: [Blacklight::Solr::Response::Facets::FacetItem.new(value: 'Value', hits: 1234)])
29
+ end
30
+
31
+ let(:response) do
32
+ instance_double(Blacklight::Solr::Response, aggregations: { "facet_field_1" => mock_display_facet1 })
33
+ end
34
+
35
+ before do
36
+ blacklight_config.facet_fields['facet_field_1'] = facet_field
37
+ allow(view).to receive_messages(groupname: nil, facet_field_names: [:facet_field_1], facet_limit_for: 10)
38
+ @response = response
39
+ end
40
+
41
+ context "with the default facet group" do
42
+ it "has a header" do
43
+ allow(view).to receive_messages(render_facet_partials: '')
44
+ render
45
+ expect(rendered).to have_selector('.facets-heading')
46
+ end
47
+ end
48
+
49
+ context "with a named facet group" do
50
+ let :facet_field do
51
+ Blacklight::Configuration::FacetField.new(field: 'facet_field_1', label: 'label', group: 'group_1').normalize!
52
+ end
53
+
54
+ before do
55
+ blacklight_config.facet_fields['facet_field_1'] = facet_field
56
+ allow(view).to receive_messages(groupname: 'group_1', facet_field_names: [:facet_field_1], facet_limit_for: 10)
57
+ end
58
+
59
+ it "has a header" do
60
+ allow(view).to receive_messages(render_facet_partials: '')
61
+ render
62
+ expect(rendered).to have_selector('.facets-heading')
63
+ expect(rendered).to have_selector('#facets-group_1')
64
+ end
65
+ end
66
+
67
+ describe "facet display" do
68
+ it "has a(n accessible) header" do
69
+ render
70
+ expect(rendered).to have_selector('.facet-field-heading')
71
+ end
72
+ it "lists values" do
73
+ render
74
+ # The .facet-content class is used by blacklight_range_limit js, and
75
+ # should be applied to the .panel-collapse div that contains the collapsible
76
+ # facet content. Please make sure it remains if possible.
77
+ expect(rendered).to have_selector('.facet-content a.facet-select')
78
+ expect(rendered).to have_selector('.facet-content .facet-count')
79
+ end
80
+ end
81
+ end
82
+ end
@@ -27,7 +27,7 @@ RSpec.describe "catalog/facet_layout" do
27
27
 
28
28
  it "is collapsable" do
29
29
  render partial: 'catalog/facet_layout', locals: { facet_field: facet_field }
30
- expect(rendered).to have_selector '.card-header.collapsed'
30
+ expect(rendered).to have_selector 'button.collapsed'
31
31
  expect(rendered).to have_selector '.collapse .card-body'
32
32
  end
33
33
 
@@ -1,76 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe "catalog/_facets" do
4
- let(:blacklight_config) { Blacklight::Configuration.new }
5
-
6
- before do
7
- allow(view).to receive_messages(blacklight_config: blacklight_config)
8
- allow(view).to receive(:search_action_path).and_return('/catalog')
9
- end
10
-
11
- context "without any facet fields" do
12
- it "does not have a header if no facets are displayed" do
13
- allow(view).to receive_messages(render_facet_partials: '')
14
- render
15
- expect(rendered).not_to have_selector('h4')
16
- end
17
- end
18
-
19
4
  context "with facet groups" do
20
- let :facet_field do
21
- Blacklight::Configuration::FacetField.new(field: 'facet_field_1', label: 'label', group: nil).normalize!
22
- end
23
-
24
5
  before do
25
- blacklight_config.facet_fields['facet_field_1'] = facet_field
26
- @mock_display_facet_1 = double(name: 'facet_field_1', sort: nil, offset: nil, prefix: nil, items: [Blacklight::Solr::Response::Facets::FacetItem.new(value: 'Value', hits: 1234)])
27
- allow(view).to receive_messages(facet_group_names: [nil], facet_field_names: [:facet_field_1], facet_limit_for: 10)
28
- @response = double
29
- allow(@response).to receive(:aggregations).and_return("facet_field_1" => @mock_display_facet_1)
30
- end
31
-
32
- context "with the default facet group" do
33
- it "has a header" do
34
- allow(view).to receive_messages(render_facet_partials: '')
35
- render
36
- expect(rendered).to have_selector('.facets-heading')
37
- end
38
- end
39
-
40
- context "with a named facet group" do
41
- let :facet_field do
42
- Blacklight::Configuration::FacetField.new(field: 'facet_field_1', label: 'label', group: 'group_1').normalize!
43
- end
44
-
45
- before do
46
- blacklight_config.facet_fields['facet_field_1'] = facet_field
47
- @mock_display_facet_1 = double(name: 'facet_field_1', sort: nil, offset: nil, prefix: nil, items: [Blacklight::Solr::Response::Facets::FacetItem.new(value: 'Value', hits: 1234)])
48
- allow(view).to receive_messages(facet_group_names: [nil, 'group_1'], facet_field_names: [:facet_field_1], facet_limit_for: 10)
49
- @response = double
50
- allow(@response).to receive(:aggregations).and_return("facet_field_1" => @mock_display_facet_1)
51
- end
52
-
53
- it "has a header" do
54
- allow(view).to receive_messages(render_facet_partials: '')
55
- render
56
- expect(rendered).to have_selector('.facets-heading')
57
- expect(rendered).to have_selector('#facets-group_1')
58
- end
6
+ stub_template('catalog/_facet_group.html.erb' => 'text')
7
+ allow(view).to receive_messages(facet_group_names: [nil, nil])
8
+ render
59
9
  end
60
10
 
61
- describe "facet display" do
62
- it "has a(n accessible) header" do
63
- render
64
- expect(rendered).to have_selector('.facet-field-heading')
65
- end
66
- it "lists values" do
67
- render
68
- # The .facet-content class is used by blacklight_range_limit js, and
69
- # should be applied to the .panel-collapse div that contains the collapsible
70
- # facet content. Please make sure it remains if possible.
71
- expect(rendered).to have_selector('.facet-content a.facet-select')
72
- expect(rendered).to have_selector('.facet-content .facet-count')
73
- end
11
+ it "Calls facet_group for each name" do
12
+ expect(rendered).to match(/^ text\n text\n$/)
74
13
  end
75
14
  end
76
15
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blacklight
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.1.0
4
+ version: 7.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Rochkind
@@ -17,7 +17,7 @@ authors:
17
17
  autorequire:
18
18
  bindir: exe
19
19
  cert_chain: []
20
- date: 2019-09-12 00:00:00.000000000 Z
20
+ date: 2019-10-10 00:00:00.000000000 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  name: rails
@@ -376,15 +376,14 @@ files:
376
376
  - app/helpers/catalog_helper.rb
377
377
  - app/javascript/blacklight/autocomplete.js
378
378
  - app/javascript/blacklight/bookmark_toggle.js
379
+ - app/javascript/blacklight/button_focus.js
379
380
  - app/javascript/blacklight/checkbox_submit.js
380
- - app/javascript/blacklight/collapsable.js
381
381
  - app/javascript/blacklight/core.js
382
382
  - app/javascript/blacklight/facet_load.js
383
383
  - app/javascript/blacklight/modal.js
384
384
  - app/javascript/blacklight/search_context.js
385
385
  - app/models/blacklight/facet_paginator.rb
386
386
  - app/models/blacklight/icon.rb
387
- - app/models/blacklight/solr/facet_paginator.rb
388
387
  - app/models/blacklight/suggest_search.rb
389
388
  - app/models/bookmark.rb
390
389
  - app/models/concerns/blacklight/configurable.rb
@@ -398,7 +397,6 @@ files:
398
397
  - app/models/concerns/blacklight/document/schema_org.rb
399
398
  - app/models/concerns/blacklight/document/semantic_fields.rb
400
399
  - app/models/concerns/blacklight/document/sms.rb
401
- - app/models/concerns/blacklight/solr/document.rb
402
400
  - app/models/concerns/blacklight/suggest/response.rb
403
401
  - app/models/concerns/blacklight/user.rb
404
402
  - app/models/record_mailer.rb
@@ -552,6 +550,8 @@ files:
552
550
  - lib/blacklight/search_builder.rb
553
551
  - lib/blacklight/search_state.rb
554
552
  - lib/blacklight/solr.rb
553
+ - lib/blacklight/solr/document.rb
554
+ - lib/blacklight/solr/facet_paginator.rb
555
555
  - lib/blacklight/solr/repository.rb
556
556
  - lib/blacklight/solr/request.rb
557
557
  - lib/blacklight/solr/response.rb
@@ -698,6 +698,7 @@ files:
698
698
  - spec/views/catalog/_constraints_element.html.erb_spec.rb
699
699
  - spec/views/catalog/_document.html.erb_spec.rb
700
700
  - spec/views/catalog/_document_list.html.erb_spec.rb
701
+ - spec/views/catalog/_facet_group.html.erb_spec.rb
701
702
  - spec/views/catalog/_facet_index_navigation.html.erb_spec.rb
702
703
  - spec/views/catalog/_facet_layout.html.erb_spec.rb
703
704
  - spec/views/catalog/_facets.html.erb_spec.rb
@@ -846,6 +847,7 @@ test_files:
846
847
  - spec/views/catalog/_constraints_element.html.erb_spec.rb
847
848
  - spec/views/catalog/_document.html.erb_spec.rb
848
849
  - spec/views/catalog/_document_list.html.erb_spec.rb
850
+ - spec/views/catalog/_facet_group.html.erb_spec.rb
849
851
  - spec/views/catalog/_facet_index_navigation.html.erb_spec.rb
850
852
  - spec/views/catalog/_facet_layout.html.erb_spec.rb
851
853
  - spec/views/catalog/_facets.html.erb_spec.rb
@@ -1,9 +0,0 @@
1
- (function($) {
2
- Blacklight.onLoad(function() {
3
- // when clicking on a link that toggles the collapsing behavior, don't do anything
4
- // with the hash or the page could jump around.
5
- $(document).on('click', 'a[data-toggle=collapse][href="#"], [data-toggle=collapse] a[href="#"]', function(event) {
6
- event.preventDefault();
7
- });
8
- });
9
- })(jQuery);