blacklight 7.21.2 → 7.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.docker/app/Dockerfile +3 -1
- data/.dockerignore +3 -0
- data/.env +2 -2
- data/.github/workflows/ruby.yml +3 -2
- data/VERSION +1 -1
- data/app/assets/javascripts/blacklight/blacklight.js +19 -3
- data/app/assets/stylesheets/blacklight/_constraints.scss +2 -0
- data/app/components/blacklight/constraints_component.rb +1 -1
- data/app/components/blacklight/facet_field_checkboxes_component.rb +1 -1
- data/app/components/blacklight/facet_item_pivot_component.rb +1 -1
- data/app/helpers/blacklight/facets_helper_behavior.rb +1 -1
- data/app/javascript/blacklight/modal.js +19 -3
- data/docker-compose.yml +5 -2
- data/lib/blacklight/configuration/facet_field.rb +2 -0
- data/lib/blacklight/solr/response/facets.rb +12 -4
- data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +7 -7
- data/spec/models/blacklight/solr/response/facets_spec.rb +6 -0
- data/tasks/blacklight.rake +5 -1
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 100a7b0ab6394c96ba5ad5606bffe36132721d9f09c5946911845f117d8bddee
|
4
|
+
data.tar.gz: a57654c6cdb05add30658903b407d86661a8b975b0af389f84c56736bff2d56c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dec089984409283e902abf6d3a79c549a1785742396dd6d1e6dbd8ec5b49b1ec5ae4be46cad25eb5bdff663880fce761e023c313f71a020f989f17932492adb4
|
7
|
+
data.tar.gz: d1bb132cc0ef21f5f9c3a715bf407c47eba801f274d7d78f5e872b6f495298d5bad2720ee89e84944c733babcda22ec62f6d8eed119df9e7ded38b70fd5de1b7
|
data/.docker/app/Dockerfile
CHANGED
data/.dockerignore
ADDED
data/.env
CHANGED
data/.github/workflows/ruby.yml
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
7.
|
1
|
+
7.22.0
|
@@ -366,7 +366,7 @@ Blacklight.modal.onFailure = function (jqXHR, textStatus, errorThrown) {
|
|
366
366
|
console.error('Server error:', this.url, jqXHR.status, errorThrown);
|
367
367
|
var contents = '<div class="modal-header">' + '<div class="modal-title">There was a problem with your request.</div>' + '<button type="button" class="blacklight-modal-close btn-close close" data-dismiss="modal" aria-label="Close">' + ' <span aria-hidden="true">×</span>' + '</button></div>' + ' <div class="modal-body"><p>Expected a successful response from the server, but got an error</p>' + '<pre>' + this.type + ' ' + this.url + "\n" + jqXHR.status + ': ' + errorThrown + '</pre></div>';
|
368
368
|
$(Blacklight.modal.modalSelector).find('.modal-content').html(contents);
|
369
|
-
|
369
|
+
Blacklight.modal.show();
|
370
370
|
};
|
371
371
|
|
372
372
|
Blacklight.modal.receiveAjax = function (contents) {
|
@@ -385,7 +385,7 @@ Blacklight.modal.receiveAjax = function (contents) {
|
|
385
385
|
$(Blacklight.modal.modalSelector).trigger(e); // if they did preventDefault, don't show the dialog
|
386
386
|
|
387
387
|
if (e.isDefaultPrevented()) return;
|
388
|
-
|
388
|
+
Blacklight.modal.show();
|
389
389
|
};
|
390
390
|
|
391
391
|
Blacklight.modal.modalAjaxLinkClick = function (e) {
|
@@ -432,7 +432,7 @@ Blacklight.modal.setupModal = function () {
|
|
432
432
|
Blacklight.modal.checkCloseModal = function (event) {
|
433
433
|
if ($(event.target).find(Blacklight.modal.modalCloseSelector).length) {
|
434
434
|
var modalFlashes = $(this).find('.flash_messages');
|
435
|
-
|
435
|
+
Blacklight.modal.hide(event.target);
|
436
436
|
event.preventDefault();
|
437
437
|
var mainFlashes = $('#main-flashes');
|
438
438
|
mainFlashes.append(modalFlashes);
|
@@ -440,6 +440,22 @@ Blacklight.modal.checkCloseModal = function (event) {
|
|
440
440
|
}
|
441
441
|
};
|
442
442
|
|
443
|
+
Blacklight.modal.hide = function (el) {
|
444
|
+
if (bootstrap.Modal.VERSION >= "5") {
|
445
|
+
bootstrap.Modal.getOrCreateInstance(el).hide();
|
446
|
+
} else {
|
447
|
+
$(el || Blacklight.modal.modalSelector).modal('hide');
|
448
|
+
}
|
449
|
+
};
|
450
|
+
|
451
|
+
Blacklight.modal.show = function (el) {
|
452
|
+
if (bootstrap.Modal.VERSION >= "5") {
|
453
|
+
bootstrap.Modal.getOrCreateInstance(el).show();
|
454
|
+
} else {
|
455
|
+
$(el || Blacklight.modal.modalSelector).modal('show');
|
456
|
+
}
|
457
|
+
};
|
458
|
+
|
443
459
|
Blacklight.onLoad(function () {
|
444
460
|
Blacklight.modal.setupModal();
|
445
461
|
});
|
@@ -86,7 +86,7 @@ module Blacklight
|
|
86
86
|
end
|
87
87
|
|
88
88
|
def facet_item_presenter(facet_config, facet_item, facet_field)
|
89
|
-
Blacklight::FacetItemPresenter.new(facet_item, facet_config, @view_context, facet_field)
|
89
|
+
(facet_config.item_presenter || Blacklight::FacetItemPresenter).new(facet_item, facet_config, @view_context, facet_field)
|
90
90
|
end
|
91
91
|
|
92
92
|
def inclusive_facet_item_presenter(facet_config, facet_item, facet_field)
|
@@ -17,7 +17,7 @@ module Blacklight
|
|
17
17
|
return to_enum(:presenters) unless block_given?
|
18
18
|
|
19
19
|
@facet_field.paginator.items.each do |item|
|
20
|
-
yield Blacklight::FacetItemPresenter.new(item, @facet_field.facet_field, @view_context, @facet_field.key, @facet_field.search_state)
|
20
|
+
yield (@facet_field.facet_field.item_presenter || Blacklight::FacetItemPresenter).new(item, @facet_field.facet_field, @view_context, @facet_field.key, @facet_field.search_state)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -78,7 +78,7 @@ module Blacklight
|
|
78
78
|
end
|
79
79
|
|
80
80
|
def facet_item_presenter(facet_item)
|
81
|
-
Blacklight::FacetItemPresenter.new(facet_item, @facet_item.facet_config, @view_context, @facet_item.facet_field, @facet_item.search_state)
|
81
|
+
(@facet_item.facet_config.item_presenter || Blacklight::FacetItemPresenter).new(facet_item, @facet_item.facet_config, @view_context, @facet_item.facet_field, @facet_item.search_state)
|
82
82
|
end
|
83
83
|
end
|
84
84
|
end
|
@@ -319,7 +319,7 @@ module Blacklight::FacetsHelperBehavior
|
|
319
319
|
end
|
320
320
|
|
321
321
|
def facet_item_presenter(facet_config, facet_item, facet_field)
|
322
|
-
Blacklight::FacetItemPresenter.new(facet_item, facet_config, self, facet_field)
|
322
|
+
(facet_config.item_presenter || Blacklight::FacetItemPresenter).new(facet_item, facet_config, self, facet_field)
|
323
323
|
end
|
324
324
|
|
325
325
|
def facet_item_component(facet_config, facet_item, facet_field, **args)
|
@@ -114,7 +114,7 @@ Blacklight.modal.onFailure = function(jqXHR, textStatus, errorThrown) {
|
|
114
114
|
this.type + ' ' + this.url + "\n" + jqXHR.status + ': ' + errorThrown +
|
115
115
|
'</pre></div>';
|
116
116
|
$(Blacklight.modal.modalSelector).find('.modal-content').html(contents);
|
117
|
-
|
117
|
+
Blacklight.modal.show();
|
118
118
|
}
|
119
119
|
|
120
120
|
Blacklight.modal.receiveAjax = function (contents) {
|
@@ -135,7 +135,7 @@ Blacklight.modal.receiveAjax = function (contents) {
|
|
135
135
|
// if they did preventDefault, don't show the dialog
|
136
136
|
if (e.isDefaultPrevented()) return;
|
137
137
|
|
138
|
-
|
138
|
+
Blacklight.modal.show();
|
139
139
|
};
|
140
140
|
|
141
141
|
|
@@ -196,7 +196,7 @@ Blacklight.modal.checkCloseModal = function(event) {
|
|
196
196
|
if ($(event.target).find(Blacklight.modal.modalCloseSelector).length) {
|
197
197
|
var modalFlashes = $(this).find('.flash_messages');
|
198
198
|
|
199
|
-
|
199
|
+
Blacklight.modal.hide(event.target);
|
200
200
|
event.preventDefault();
|
201
201
|
|
202
202
|
var mainFlashes = $('#main-flashes');
|
@@ -205,6 +205,22 @@ Blacklight.modal.checkCloseModal = function(event) {
|
|
205
205
|
}
|
206
206
|
}
|
207
207
|
|
208
|
+
Blacklight.modal.hide = function(el) {
|
209
|
+
if (bootstrap.Modal.VERSION >= "5") {
|
210
|
+
bootstrap.Modal.getOrCreateInstance(el).hide();
|
211
|
+
} else {
|
212
|
+
$(el || Blacklight.modal.modalSelector).modal('hide');
|
213
|
+
}
|
214
|
+
}
|
215
|
+
|
216
|
+
Blacklight.modal.show = function(el) {
|
217
|
+
if (bootstrap.Modal.VERSION >= "5") {
|
218
|
+
bootstrap.Modal.getOrCreateInstance(el).show();
|
219
|
+
} else {
|
220
|
+
$(el || Blacklight.modal.modalSelector).modal('show');
|
221
|
+
}
|
222
|
+
}
|
223
|
+
|
208
224
|
Blacklight.onLoad(function() {
|
209
225
|
Blacklight.modal.setupModal();
|
210
226
|
});
|
data/docker-compose.yml
CHANGED
@@ -7,8 +7,9 @@ services:
|
|
7
7
|
dockerfile: .docker/app/Dockerfile
|
8
8
|
args:
|
9
9
|
- ALPINE_RUBY_VERSION
|
10
|
-
|
11
|
-
|
10
|
+
# mounting . is causing seg-fault on macosx
|
11
|
+
#volumes:
|
12
|
+
#- .:/app
|
12
13
|
depends_on:
|
13
14
|
- solr
|
14
15
|
ports:
|
@@ -16,6 +17,8 @@ services:
|
|
16
17
|
environment:
|
17
18
|
- SOLR_URL # Set via environment variable or use default defined in .env file
|
18
19
|
- RAILS_VERSION # Set via environment variable or use default defined in .env file
|
20
|
+
- SOLR_ENV=docker-compose
|
21
|
+
- ENGINE_CART_RAILS_OPTIONS=--skip-git --skip-listen --skip-spring --skip-keeps --skip-action-cable --skip-coffee --skip-test --skip-solr
|
19
22
|
|
20
23
|
solr:
|
21
24
|
environment:
|
@@ -58,6 +58,8 @@ module Blacklight
|
|
58
58
|
# Rendering:
|
59
59
|
# @!attribute presenter
|
60
60
|
# @return [Blacklight::FacetFieldPresenter]
|
61
|
+
# @!attribute item_presenter
|
62
|
+
# @return [Blacklight::FacetItemPresenter]
|
61
63
|
# @!attribute component
|
62
64
|
# @return [Blacklight::FacetFieldListComponent]
|
63
65
|
# @!attribute item_component
|
@@ -61,6 +61,10 @@ module Blacklight::Solr::Response::Facets
|
|
61
61
|
@options[:data] || {}
|
62
62
|
end
|
63
63
|
|
64
|
+
def response
|
65
|
+
@options[:response]
|
66
|
+
end
|
67
|
+
|
64
68
|
def index?
|
65
69
|
sort == 'index'
|
66
70
|
end
|
@@ -180,7 +184,7 @@ module Blacklight::Solr::Response::Facets
|
|
180
184
|
end
|
181
185
|
|
182
186
|
options = facet_field_aggregation_options(facet_field_name)
|
183
|
-
facet_field = FacetField.new(facet_field_name, items, options)
|
187
|
+
facet_field = FacetField.new(facet_field_name, items, options.merge(response: self))
|
184
188
|
|
185
189
|
if values[nil]
|
186
190
|
facet_field.missing = items.find(&:missing)
|
@@ -213,7 +217,9 @@ module Blacklight::Solr::Response::Facets
|
|
213
217
|
|
214
218
|
items = items.sort_by(&:hits).reverse if facet_field.sort && facet_field.sort.to_sym == :count
|
215
219
|
|
216
|
-
|
220
|
+
facet_field = Blacklight::Solr::Response::Facets::FacetField.new field_name, items, response: response
|
221
|
+
|
222
|
+
hash[field_name] = facet_field
|
217
223
|
end
|
218
224
|
end
|
219
225
|
|
@@ -244,7 +250,9 @@ module Blacklight::Solr::Response::Facets
|
|
244
250
|
|
245
251
|
# alias all the possible blacklight config names..
|
246
252
|
blacklight_config.facet_fields.select { |_k, v| v.pivot && v.pivot.join(",") == field_name }.each_key do |key|
|
247
|
-
|
253
|
+
facet_field = Blacklight::Solr::Response::Facets::FacetField.new key, items, response: self
|
254
|
+
|
255
|
+
hash[key] = facet_field
|
248
256
|
end
|
249
257
|
end
|
250
258
|
end
|
@@ -288,7 +296,7 @@ module Blacklight::Solr::Response::Facets
|
|
288
296
|
i
|
289
297
|
end
|
290
298
|
|
291
|
-
options = facet_field_aggregation_options(facet_field_name).merge(data: data)
|
299
|
+
options = facet_field_aggregation_options(facet_field_name).merge(data: data, response: self)
|
292
300
|
facet_field = FacetField.new(facet_field_name, items, options)
|
293
301
|
|
294
302
|
facet_field.missing = Blacklight::Solr::Response::Facets::FacetItem.new(
|
@@ -305,7 +305,7 @@ RSpec.describe Blacklight::FacetsHelperBehavior do
|
|
305
305
|
let(:search_state) { double(has_facet?: false, add_facet_params_and_redirect: { controller: 'catalog' }) }
|
306
306
|
|
307
307
|
before do
|
308
|
-
allow(helper).to receive(:facet_configuration_for_field).with('simple_field').and_return(Blacklight::Configuration::FacetField.new(key: 'simple_field', query: nil, date: nil, helper_method: nil, single: false, url_method: nil))
|
308
|
+
allow(helper).to receive(:facet_configuration_for_field).with('simple_field').and_return(Blacklight::Configuration::FacetField.new(key: 'simple_field', query: nil, date: nil, helper_method: nil, single: false, url_method: nil, item_presenter: nil))
|
309
309
|
allow(helper).to receive(:facet_display_value).and_return('Z')
|
310
310
|
allow(helper).to receive(:search_state).and_return(search_state)
|
311
311
|
allow(helper).to receive(:search_action_path) do |*args|
|
@@ -326,7 +326,7 @@ RSpec.describe Blacklight::FacetsHelperBehavior do
|
|
326
326
|
let(:expected_html) { '<span class="facet-label"><a class="facet-select" rel="nofollow" href="/blabla">Z</a></span><span class="facet-count">10</span>' }
|
327
327
|
|
328
328
|
it "uses that method" do
|
329
|
-
allow(helper).to receive(:facet_configuration_for_field).with('simple_field').and_return(Blacklight::Configuration::FacetField.new(key: 'simple_field', query: nil, date: nil, helper_method: nil, single: false, url_method: :test_method))
|
329
|
+
allow(helper).to receive(:facet_configuration_for_field).with('simple_field').and_return(Blacklight::Configuration::FacetField.new(key: 'simple_field', query: nil, date: nil, helper_method: nil, single: false, url_method: :test_method, item_presenter: nil))
|
330
330
|
allow(helper).to receive(:test_method).with('simple_field', item).and_return('/blabla')
|
331
331
|
result = helper.render_facet_value('simple_field', item)
|
332
332
|
expect(result).to be_equivalent_to(expected_html).respecting_element_order
|
@@ -345,28 +345,28 @@ RSpec.describe Blacklight::FacetsHelperBehavior do
|
|
345
345
|
|
346
346
|
describe "#facet_display_value" do
|
347
347
|
it "justs be the facet value for an ordinary facet" do
|
348
|
-
allow(helper).to receive(:facet_configuration_for_field).with('simple_field').and_return(double(query: nil, date: nil, helper_method: nil, url_method: nil))
|
348
|
+
allow(helper).to receive(:facet_configuration_for_field).with('simple_field').and_return(double(query: nil, date: nil, helper_method: nil, url_method: nil, item_presenter: nil))
|
349
349
|
expect(helper.facet_display_value('simple_field', 'asdf')).to eq 'asdf'
|
350
350
|
end
|
351
351
|
|
352
352
|
it "allows you to pass in a :helper_method argument to the configuration" do
|
353
|
-
allow(helper).to receive(:facet_configuration_for_field).with('helper_field').and_return(double(query: nil, date: nil, url_method: nil, helper_method: :my_facet_value_renderer))
|
353
|
+
allow(helper).to receive(:facet_configuration_for_field).with('helper_field').and_return(double(query: nil, date: nil, url_method: nil, helper_method: :my_facet_value_renderer, item_presenter: nil))
|
354
354
|
allow(helper).to receive(:my_facet_value_renderer).with('qwerty').and_return('abc')
|
355
355
|
expect(helper.facet_display_value('helper_field', 'qwerty')).to eq 'abc'
|
356
356
|
end
|
357
357
|
|
358
358
|
it "extracts the configuration label for a query facet" do
|
359
|
-
allow(helper).to receive(:facet_configuration_for_field).with('query_facet').and_return(double(query: { 'query_key' => { label: 'XYZ' } }, date: nil, helper_method: nil, url_method: nil))
|
359
|
+
allow(helper).to receive(:facet_configuration_for_field).with('query_facet').and_return(double(query: { 'query_key' => { label: 'XYZ' } }, date: nil, helper_method: nil, url_method: nil, item_presenter: nil))
|
360
360
|
expect(helper.facet_display_value('query_facet', 'query_key')).to eq 'XYZ'
|
361
361
|
end
|
362
362
|
|
363
363
|
it "localizes the label for date-type facets" do
|
364
|
-
allow(helper).to receive(:facet_configuration_for_field).with('date_facet').and_return(double('date' => true, :query => nil, :helper_method => nil, :url_method => nil))
|
364
|
+
allow(helper).to receive(:facet_configuration_for_field).with('date_facet').and_return(double('date' => true, :query => nil, :helper_method => nil, :url_method => nil, :item_presenter => nil))
|
365
365
|
expect(helper.facet_display_value('date_facet', '2012-01-01')).to eq 'Sun, 01 Jan 2012 00:00:00 +0000'
|
366
366
|
end
|
367
367
|
|
368
368
|
it "localizes the label for date-type facets with the supplied localization options" do
|
369
|
-
allow(helper).to receive(:facet_configuration_for_field).with('date_facet').and_return(double('date' => { format: :short }, :query => nil, :helper_method => nil, :url_method => nil))
|
369
|
+
allow(helper).to receive(:facet_configuration_for_field).with('date_facet').and_return(double('date' => { format: :short }, :query => nil, :helper_method => nil, :url_method => nil, :item_presenter => nil))
|
370
370
|
expect(helper.facet_display_value('date_facet', '2012-01-01')).to eq '01 Jan 00:00'
|
371
371
|
end
|
372
372
|
end
|
@@ -102,6 +102,12 @@ RSpec.describe Blacklight::Solr::Response::Facets, api: true do
|
|
102
102
|
expect(subject.aggregations['my_field'].prefix).to be_nil
|
103
103
|
end
|
104
104
|
end
|
105
|
+
|
106
|
+
describe '#response' do
|
107
|
+
it 'provides access to the full solr response' do
|
108
|
+
expect(subject.aggregations['my_field'].response).to eq subject
|
109
|
+
end
|
110
|
+
end
|
105
111
|
end
|
106
112
|
|
107
113
|
describe "#merge_facet" do
|
data/tasks/blacklight.rake
CHANGED
@@ -21,7 +21,11 @@ def system_with_error_handling(*args)
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def with_solr
|
24
|
-
|
24
|
+
# We're being invoked by the app entrypoint script and solr is already up via docker-compose
|
25
|
+
if ENV['SOLR_ENV'] == 'docker-compose'
|
26
|
+
yield
|
27
|
+
elsif system('docker-compose -v')
|
28
|
+
# We're not running docker-compose up but still want to use a docker instance of solr.
|
25
29
|
begin
|
26
30
|
puts "Starting Solr"
|
27
31
|
system_with_error_handling "docker-compose up -d solr"
|
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.
|
4
|
+
version: 7.22.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Rochkind
|
@@ -14,10 +14,10 @@ authors:
|
|
14
14
|
- Dan Funk
|
15
15
|
- Naomi Dushay
|
16
16
|
- Justin Coyne
|
17
|
-
autorequire:
|
17
|
+
autorequire:
|
18
18
|
bindir: exe
|
19
19
|
cert_chain: []
|
20
|
-
date: 2021-
|
20
|
+
date: 2021-12-03 00:00:00.000000000 Z
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
23
|
name: rails
|
@@ -381,6 +381,7 @@ files:
|
|
381
381
|
- ".babelrc"
|
382
382
|
- ".docker/app/Dockerfile"
|
383
383
|
- ".docker/app/entrypoint.sh"
|
384
|
+
- ".dockerignore"
|
384
385
|
- ".env"
|
385
386
|
- ".github/workflows/ruby.yml"
|
386
387
|
- ".gitignore"
|
@@ -919,7 +920,7 @@ homepage: http://projectblacklight.org/
|
|
919
920
|
licenses:
|
920
921
|
- Apache 2.0
|
921
922
|
metadata: {}
|
922
|
-
post_install_message:
|
923
|
+
post_install_message:
|
923
924
|
rdoc_options: []
|
924
925
|
require_paths:
|
925
926
|
- lib
|
@@ -934,8 +935,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
934
935
|
- !ruby/object:Gem::Version
|
935
936
|
version: '0'
|
936
937
|
requirements: []
|
937
|
-
rubygems_version: 3.
|
938
|
-
signing_key:
|
938
|
+
rubygems_version: 3.2.15
|
939
|
+
signing_key:
|
939
940
|
specification_version: 4
|
940
941
|
summary: Blacklight provides a discovery interface for any Solr (http://lucene.apache.org/solr)
|
941
942
|
index.
|