blacklight 6.19.2 → 6.24.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/.travis.yml +16 -25
- data/Gemfile +2 -0
- data/README.md +1 -1
- data/VERSION +1 -1
- data/app/helpers/blacklight/layout_helper_behavior.rb +7 -0
- data/app/models/concerns/blacklight/document.rb +16 -0
- data/app/values/blacklight/types.rb +28 -0
- data/app/views/catalog/_facet_pagination.html.erb +2 -2
- data/app/views/catalog/_per_page_widget.html.erb +1 -1
- data/app/views/catalog/_search_form.html.erb +1 -1
- data/app/views/catalog/_sort_and_per_page.html.erb +1 -1
- data/app/views/catalog/_sort_widget.html.erb +1 -1
- data/app/views/catalog/_thumbnail_default.html.erb +3 -3
- data/app/views/catalog/email.html.erb +3 -1
- data/app/views/catalog/email_success.html.erb +4 -2
- data/app/views/catalog/facet.html.erb +3 -1
- data/app/views/catalog/sms.html.erb +4 -1
- data/app/views/catalog/sms_success.html.erb +5 -2
- data/app/views/layouts/blacklight.html.erb +2 -2
- data/app/views/shared/_ajax_modal.html.erb +2 -2
- data/blacklight.gemspec +1 -2
- data/config/locales/blacklight.de.yml +4 -0
- data/config/locales/blacklight.en.yml +4 -0
- data/config/locales/blacklight.es.yml +4 -0
- data/config/locales/blacklight.fr.yml +4 -0
- data/config/locales/blacklight.it.yml +4 -0
- data/config/locales/blacklight.pt-BR.yml +4 -0
- data/config/locales/blacklight.sq.yml +1 -0
- data/config/locales/blacklight.zh.yml +1 -0
- data/config/routes.rb +1 -1
- data/lib/blacklight/engine.rb +6 -2
- data/lib/blacklight/utils.rb +7 -3
- data/solr/conf/schema.xml +0 -2
- data/spec/features/search_spec.rb +6 -2
- data/spec/helpers/layout_helper_spec.rb +10 -0
- data/spec/models/solr_document_spec.rb +25 -1
- data/spec/routing/catalog_routing_spec.rb +16 -0
- data/spec/spec_helper.rb +5 -20
- metadata +9 -23
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 57d198c6aed6d4e2cca7c1945904e4b13139ba1788acd6363d427aa30d436c14
|
|
4
|
+
data.tar.gz: 92364314b9bbb7fcb9afc3f229a641afcd05ba43e1df4b19c8512e0e256523f9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 11048e0150ec7619375f56771faf38d1bdd0797f0f19cf67c8d8926f9f1e26adab9caf1a0f4fae084be28807aa0ab4e7320c149f688181f49eea8dedfd73d7c7
|
|
7
|
+
data.tar.gz: ece97e66b4d5a6c1f91b5ea9491811d06983435e592936e973de5e253fcf8405351b601999480340384ef229affa3e703b261a628a41286975b20a83e789ea2e
|
data/.travis.yml
CHANGED
|
@@ -1,34 +1,15 @@
|
|
|
1
|
-
dist:
|
|
1
|
+
dist: bionic
|
|
2
2
|
addons:
|
|
3
3
|
chrome: stable
|
|
4
4
|
language: ruby
|
|
5
|
-
sudo: false
|
|
6
5
|
|
|
7
6
|
notifications:
|
|
8
7
|
email: false
|
|
9
8
|
|
|
10
9
|
rvm:
|
|
11
|
-
- 2.5.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
include:
|
|
15
|
-
- rvm: 2.5.0
|
|
16
|
-
env: "RAILS_VERSION=5.2.0"
|
|
17
|
-
- rvm: 2.4.4
|
|
18
|
-
env: "RAILS_VERSION=4.2.10"
|
|
19
|
-
- rvm: 2.2.10
|
|
20
|
-
env: "RAILS_VESION=5.0.7"
|
|
21
|
-
- rvm: 2.3.7
|
|
22
|
-
env: "RAILS_VERSION=5.1.6"
|
|
23
|
-
- rvm: jruby-9.1.17.0
|
|
24
|
-
env: "RAILS_VERSION=5.2.0 JRUBY_OPTS=\"-J-Xms512m -J-Xmx1024m\""
|
|
25
|
-
allow_failures:
|
|
26
|
-
- rvm: jruby-9.1.17.0
|
|
27
|
-
- rvm: 2.4.4
|
|
28
|
-
env: "RAILS_VERSION=4.2.10"
|
|
29
|
-
- rvm: 2.2.10
|
|
30
|
-
env: "RAILS_VESION=5.0.7"
|
|
31
|
-
fast_finish: true
|
|
10
|
+
- 2.5.7
|
|
11
|
+
- 2.6.5
|
|
12
|
+
- 2.7.0
|
|
32
13
|
|
|
33
14
|
before_install:
|
|
34
15
|
- gem update --system
|
|
@@ -39,7 +20,9 @@ before_script:
|
|
|
39
20
|
- if [[ "${RAILS_VERSION}" =~ ^4.2.* ]]; then perl -pi -e "s/ActiveRecord::Migration\[[\d\.]+\]/ActiveRecord::Migration/" db/migrate/*; fi
|
|
40
21
|
|
|
41
22
|
env:
|
|
42
|
-
- "RAILS_VERSION=5.1.
|
|
23
|
+
- "RAILS_VERSION=5.1.7"
|
|
24
|
+
- "RAILS_VERSION=5.2.0"
|
|
25
|
+
|
|
43
26
|
|
|
44
27
|
notifications:
|
|
45
28
|
irc: "irc.freenode.org#blacklight"
|
|
@@ -49,5 +32,13 @@ notifications:
|
|
|
49
32
|
global_env:
|
|
50
33
|
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true
|
|
51
34
|
- ENGINE_CART_RAILS_OPTIONS='--skip-git --skip-bundle --skip-listen --skip-spring --skip-yarn --skip-keeps --skip-action-cable --skip-coffee --skip-test'
|
|
35
|
+
- CC_TEST_REPORTER_ID=5042c7358c96b0b926088a4cda3e132fffe7a66ce8047cdb1dc6f0b4b6676b79
|
|
36
|
+
|
|
37
|
+
jdk: openjdk11
|
|
52
38
|
|
|
53
|
-
|
|
39
|
+
before_script:
|
|
40
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
|
41
|
+
- chmod +x ./cc-test-reporter
|
|
42
|
+
- ./cc-test-reporter before-build
|
|
43
|
+
after_script:
|
|
44
|
+
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Blacklight
|
|
2
2
|
|
|
3
|
-
[](https://travis-ci.org/projectblacklight/blacklight) [](http://badge.fury.io/rb/blacklight) [](https://travis-ci.org/projectblacklight/blacklight) [](http://badge.fury.io/rb/blacklight) [](https://codeclimate.com/github/projectblacklight/blacklight/test_coverage)
|
|
4
4
|
|
|
5
5
|
Blacklight is an open source Solr user interface discovery platform.
|
|
6
6
|
You can use Blacklight to enable searching and browsing of your collections.
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
6.
|
|
1
|
+
6.24.0
|
|
@@ -11,6 +11,13 @@ module Blacklight
|
|
|
11
11
|
"#{main_content_classes} show-document"
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
+
##
|
|
15
|
+
# Attributes to add to the <html> tag (e.g. lang and dir)
|
|
16
|
+
# @return [Hash]
|
|
17
|
+
def html_tag_attributes
|
|
18
|
+
{ lang: I18n.locale }
|
|
19
|
+
end
|
|
20
|
+
|
|
14
21
|
##
|
|
15
22
|
# Classes added to a document's sidebar div
|
|
16
23
|
# @return [String]
|
|
@@ -144,6 +144,22 @@ module Blacklight::Document
|
|
|
144
144
|
def unique_key
|
|
145
145
|
@unique_key ||= 'id'
|
|
146
146
|
end
|
|
147
|
+
|
|
148
|
+
# Define an attribute reader on a document model
|
|
149
|
+
# @Example
|
|
150
|
+
# class SolrDocument
|
|
151
|
+
# include Blacklight::Solr::Document
|
|
152
|
+
# attribute :title, Blacklight::Types::String, 'title_tesim'
|
|
153
|
+
# end
|
|
154
|
+
#
|
|
155
|
+
# doc = SolrDocument.new(title_tesim: ["One flew over the cuckoo's nest"])
|
|
156
|
+
# doc.title
|
|
157
|
+
# #=> "One flew over the cuckoo's nest"
|
|
158
|
+
def attribute(name, type, field)
|
|
159
|
+
define_method name do
|
|
160
|
+
type.coerce(self[field])
|
|
161
|
+
end
|
|
162
|
+
end
|
|
147
163
|
end
|
|
148
164
|
|
|
149
165
|
private
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Blacklight
|
|
2
|
+
# These are data types that blacklight can use to coerce values from the index
|
|
3
|
+
module Types
|
|
4
|
+
class Array
|
|
5
|
+
def self.coerce(input)
|
|
6
|
+
::Array.wrap(input)
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
class String
|
|
11
|
+
def self.coerce(input)
|
|
12
|
+
::Array.wrap(input).first
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class Date
|
|
17
|
+
def self.coerce(input)
|
|
18
|
+
field = String.coerce(input)
|
|
19
|
+
return if field.blank?
|
|
20
|
+
begin
|
|
21
|
+
::Date.parse(field)
|
|
22
|
+
rescue ArgumentError
|
|
23
|
+
Rails.logger.info "Unable to parse date: #{field.first.inspect}"
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<div class="prev_next_links btn-group pull-left">
|
|
2
2
|
<%= link_to_previous_page @pagination, raw(t('views.pagination.previous')), params: search_state.to_h, param_name: blacklight_config.facet_paginator_class.request_keys[:page], class: 'btn btn-link', data: { ajax_modal: "preserve" } do %>
|
|
3
|
-
|
|
3
|
+
<%= content_tag :span, raw(t('views.pagination.previous')), class: 'disabled btn btn-disabled' %>
|
|
4
4
|
<% end %>
|
|
5
5
|
|
|
6
6
|
<%= link_to_next_page @pagination, raw(t('views.pagination.next')), params: search_state.to_h, param_name: blacklight_config.facet_paginator_class.request_keys[:page], class: 'btn btn-link', data: { ajax_modal: "preserve" } do %>
|
|
7
|
-
|
|
7
|
+
<%= content_tag :span, raw(t('views.pagination.next')), class: 'disabled btn btn-disabled' %>
|
|
8
8
|
<% end %>
|
|
9
9
|
</div>
|
|
10
10
|
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
</button>
|
|
8
8
|
<ul class="dropdown-menu" role="menu">
|
|
9
9
|
<%- per_page_options_for_select.each do |(label, count)| %>
|
|
10
|
-
<li><%= link_to(label, url_for(search_state.params_for_search(per_page: count))) %></li>
|
|
10
|
+
<li role="menuitem"><%= link_to(label, url_for(search_state.params_for_search(per_page: count))) %></li>
|
|
11
11
|
<%- end -%>
|
|
12
12
|
</ul>
|
|
13
13
|
</div>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<%= form_tag search_action_url, method: :get, class: 'search-query-form clearfix navbar-form', role: 'search' do %>
|
|
1
|
+
<%= form_tag search_action_url, method: :get, class: 'search-query-form clearfix navbar-form', role: 'search', 'aria-label' => t('blacklight.search.form.submit') do %>
|
|
2
2
|
<%= render_hash_as_hidden_fields(search_state.params_for_search.except(:q, :search_field, :qt, :page, :utf8)) %>
|
|
3
3
|
<div class="input-group">
|
|
4
4
|
<% if search_fields.length > 1 %>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<div id="sortAndPerPage" class="clearfix">
|
|
1
|
+
<div id="sortAndPerPage" class="clearfix" role="navigation" aria-label="<%= t('blacklight.search.per_page.aria_label')%>">
|
|
2
2
|
<%= render :partial => "paginate_compact", :object => @response if show_pagination? %>
|
|
3
3
|
<%= render_results_collection_tools wrapping_class: "search-widgets pull-right" %>
|
|
4
4
|
</div>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
<ul class="dropdown-menu" role="menu">
|
|
8
8
|
<%- active_sort_fields.each do |sort_key, field_config| %>
|
|
9
|
-
<li><%= link_to(sort_field_label(sort_key), url_for(search_state.params_for_search(sort: sort_key))) %></li>
|
|
9
|
+
<li role="menuitem"><%= link_to(sort_field_label(sort_key), url_for(search_state.params_for_search(sort: sort_key))) %></li>
|
|
10
10
|
<%- end -%>
|
|
11
11
|
</ul>
|
|
12
12
|
</div>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<%- if has_thumbnail?(document) && tn = render_thumbnail_tag(document, {}, :counter
|
|
1
|
+
<%- if has_thumbnail?(document) && tn = render_thumbnail_tag(document, { alt: '' }, 'aria-hidden': true, tabindex: -1, counter: document_counter_with_offset(document_counter)) %>
|
|
2
2
|
<div class="document-thumbnail">
|
|
3
3
|
<%= tn %>
|
|
4
|
-
</div>
|
|
5
|
-
<%- end %>
|
|
4
|
+
</div>
|
|
5
|
+
<%- end %>
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
<div class="modal-header">
|
|
2
|
-
<button type="button" class="ajax-modal-close close" data-dismiss="modal" aria-
|
|
2
|
+
<button type="button" class="ajax-modal-close close" data-dismiss="modal" aria-label="<%= t('blacklight.modal.close') %>">
|
|
3
|
+
<span aria-hidden="true">×</span>
|
|
4
|
+
</button>
|
|
3
5
|
<h1 class="modal-title"><%= t('blacklight.email.form.title') %></h1>
|
|
4
6
|
</div>
|
|
5
7
|
<%= render :partial => 'email_form' %>
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
<div class="modal-header">
|
|
2
|
-
<button type="button" class="close" data-dismiss="modal" aria-
|
|
2
|
+
<button type="button" class="ajax-modal-close close" data-dismiss="modal" aria-label="<%= t('blacklight.modal.close') %>">
|
|
3
|
+
<span aria-hidden="true">×</span>
|
|
4
|
+
</button>
|
|
3
5
|
<h1><%= t('blacklight.email.form.title') %></h1>
|
|
4
6
|
</div>
|
|
5
7
|
|
|
6
8
|
<div class="modal-body">
|
|
7
9
|
<%= render :partial=>'/flash_msg' %>
|
|
8
10
|
<span class="ajax-close-modal"></span>
|
|
9
|
-
</div>
|
|
11
|
+
</div>
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
</div>
|
|
4
4
|
|
|
5
5
|
<div class="modal-header">
|
|
6
|
-
<button type="button" class="ajax-modal-close close" data-dismiss="modal" aria-
|
|
6
|
+
<button type="button" class="ajax-modal-close close" data-dismiss="modal" aria-label="<%= t('blacklight.modal.close') %>">
|
|
7
|
+
<span aria-hidden="true">×</span>
|
|
8
|
+
</button>
|
|
7
9
|
|
|
8
10
|
<h3 class="modal-title"><%= facet_field_label(@facet.key) %></h3>
|
|
9
11
|
<%= render partial: 'facet_index_navigation' if @facet.index_range && @display_facet.index? %>
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
<div class="modal-header">
|
|
2
|
-
|
|
2
|
+
<button type="button" class="ajax-modal-close close" data-dismiss="modal" aria-label="<%= t('blacklight.modal.close') %>">
|
|
3
|
+
<span aria-hidden="true">×</span>
|
|
4
|
+
</button>
|
|
5
|
+
|
|
3
6
|
<h1 class="modal-title"><%= t('blacklight.sms.form.title') %></h1>
|
|
4
7
|
</div>
|
|
5
8
|
<%= render :partial => 'sms_form' %>
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
<div class="modal-header">
|
|
2
|
-
<button type="button" class="close" data-dismiss="modal" aria-
|
|
2
|
+
<button type="button" class="ajax-modal-close close" data-dismiss="modal" aria-label="<%= t('blacklight.modal.close') %>">
|
|
3
|
+
<span aria-hidden="true">×</span>
|
|
4
|
+
</button>
|
|
5
|
+
|
|
3
6
|
<h1 class="modal-title"><%= t('blacklight.sms.form.title') %></h1>
|
|
4
7
|
</div>
|
|
5
8
|
|
|
6
9
|
<div class="modal-body">
|
|
7
10
|
<%= render :partial=>'/flash_msg' %>
|
|
8
11
|
<span class="ajax-close-modal"></span>
|
|
9
|
-
</div>
|
|
12
|
+
</div>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
|
-
|
|
2
|
+
<%= content_tag :html, class: 'no-js', **html_tag_attributes do %>
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8">
|
|
5
5
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
@@ -41,4 +41,4 @@
|
|
|
41
41
|
|
|
42
42
|
<%= render :partial => 'shared/footer' %>
|
|
43
43
|
</body>
|
|
44
|
-
|
|
44
|
+
<% end %>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<div id="ajax-modal" class="modal fade" tabindex="-1" role="dialog" aria-
|
|
2
|
-
<div class="modal-dialog">
|
|
1
|
+
<div id="ajax-modal" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true">
|
|
2
|
+
<div class="modal-dialog" role="document">
|
|
3
3
|
<div class="modal-content">
|
|
4
4
|
</div>
|
|
5
5
|
</div>
|
data/blacklight.gemspec
CHANGED
|
@@ -40,11 +40,10 @@ Gem::Specification.new do |s|
|
|
|
40
40
|
s.add_development_dependency "rspec-its"
|
|
41
41
|
s.add_development_dependency "rspec-collection_matchers", ">= 1.0"
|
|
42
42
|
s.add_development_dependency "capybara", '>= 2', '< 4'
|
|
43
|
-
s.add_development_dependency '
|
|
43
|
+
s.add_development_dependency 'webdrivers', '~> 3.0'
|
|
44
44
|
s.add_development_dependency "selenium-webdriver", '>= 3.13.1'
|
|
45
45
|
s.add_development_dependency 'engine_cart', '~> 2.1'
|
|
46
46
|
s.add_development_dependency "equivalent-xml"
|
|
47
|
-
s.add_development_dependency "coveralls"
|
|
48
47
|
s.add_development_dependency "simplecov"
|
|
49
48
|
s.add_development_dependency "rubocop", '~> 0.47.0' # pending release of 0.48.1
|
|
50
49
|
s.add_development_dependency "rubocop-rspec", '~> 1.8.0'
|
|
@@ -25,6 +25,9 @@ de:
|
|
|
25
25
|
and: 'und'
|
|
26
26
|
or: 'oder'
|
|
27
27
|
|
|
28
|
+
modal:
|
|
29
|
+
close: Schließen
|
|
30
|
+
|
|
28
31
|
bookmarks:
|
|
29
32
|
title: 'Lesezeichen'
|
|
30
33
|
page_title: 'Lesezeichen - %{application_name}'
|
|
@@ -157,6 +160,7 @@ de:
|
|
|
157
160
|
button_label: '%{count} pro Seite'
|
|
158
161
|
title: 'Anzahl der Ergebnisse pro Seite angezeigt werden'
|
|
159
162
|
submit: 'Aktualisieren'
|
|
163
|
+
aria_label: 'Ergebnisnavigation'
|
|
160
164
|
sort:
|
|
161
165
|
label: 'Ordnen bei %{field}'
|
|
162
166
|
submit: 'Ergebnisse ordnen'
|
|
@@ -25,6 +25,9 @@ en:
|
|
|
25
25
|
and: 'and'
|
|
26
26
|
or: 'or'
|
|
27
27
|
|
|
28
|
+
modal:
|
|
29
|
+
close: "Close"
|
|
30
|
+
|
|
28
31
|
bookmarks:
|
|
29
32
|
title: 'Bookmarks'
|
|
30
33
|
page_title: 'Bookmarks - %{application_name}'
|
|
@@ -157,6 +160,7 @@ en:
|
|
|
157
160
|
button_label: '%{count} per page'
|
|
158
161
|
title: 'Number of results to display per page'
|
|
159
162
|
submit: 'Update'
|
|
163
|
+
aria_label: 'Results navigation'
|
|
160
164
|
sort:
|
|
161
165
|
label: 'Sort by %{field}'
|
|
162
166
|
submit: 'sort results'
|
|
@@ -25,6 +25,9 @@ es:
|
|
|
25
25
|
and: 'y'
|
|
26
26
|
or: 'o'
|
|
27
27
|
|
|
28
|
+
modal:
|
|
29
|
+
close: cerca
|
|
30
|
+
|
|
28
31
|
bookmarks:
|
|
29
32
|
title: 'Favoritos'
|
|
30
33
|
page_title: 'Favoritos - %{application_name}'
|
|
@@ -157,6 +160,7 @@ es:
|
|
|
157
160
|
button_label: '%{count} por página'
|
|
158
161
|
title: 'El número de resultados a mostrar por página'
|
|
159
162
|
submit: 'Actualización'
|
|
163
|
+
aria_label: 'Navegación de resultados'
|
|
160
164
|
sort:
|
|
161
165
|
label: 'Ordenar por %{field}'
|
|
162
166
|
submit: 'Resultados de ordenación'
|
|
@@ -25,6 +25,9 @@ fr:
|
|
|
25
25
|
and: 'et'
|
|
26
26
|
or: 'ou'
|
|
27
27
|
|
|
28
|
+
modal:
|
|
29
|
+
close: Fermer
|
|
30
|
+
|
|
28
31
|
bookmarks:
|
|
29
32
|
title: 'Favoris'
|
|
30
33
|
page_title: 'Favoris - %{application_name}'
|
|
@@ -162,6 +165,7 @@ fr:
|
|
|
162
165
|
button_label: '%{count} par page'
|
|
163
166
|
title: 'Nombre de résultats à afficher par page'
|
|
164
167
|
submit: 'mettre à jour'
|
|
168
|
+
aria_label: 'Navigation dans les résultats'
|
|
165
169
|
sort:
|
|
166
170
|
label: 'Trier par %{field}'
|
|
167
171
|
submit: 'trier les résultats'
|
|
@@ -25,6 +25,9 @@ it:
|
|
|
25
25
|
and: 'e'
|
|
26
26
|
or: 'o'
|
|
27
27
|
|
|
28
|
+
modal:
|
|
29
|
+
close: Vicino
|
|
30
|
+
|
|
28
31
|
bookmarks:
|
|
29
32
|
title: 'Preferiti'
|
|
30
33
|
page_title: 'Preferiti - %{application_name}'
|
|
@@ -157,6 +160,7 @@ it:
|
|
|
157
160
|
button_label: '%{count} per pagina'
|
|
158
161
|
title: 'Risultati per pagina'
|
|
159
162
|
submit: 'Aggiorna'
|
|
163
|
+
aria_label: 'Navigazione dei risultati'
|
|
160
164
|
sort:
|
|
161
165
|
label: 'Ordina per %{field}'
|
|
162
166
|
submit: 'Ordina i risultati'
|
|
@@ -25,6 +25,9 @@ pt-BR:
|
|
|
25
25
|
and: 'e'
|
|
26
26
|
or: 'ou'
|
|
27
27
|
|
|
28
|
+
modal:
|
|
29
|
+
close: Fechar
|
|
30
|
+
|
|
28
31
|
bookmarks:
|
|
29
32
|
title: 'Favoritos'
|
|
30
33
|
page_title: 'Favoritos - %{application_name}'
|
|
@@ -156,6 +159,7 @@ pt-BR:
|
|
|
156
159
|
button_label: '%{count} por página'
|
|
157
160
|
title: 'Número de resultados para mostrar por página'
|
|
158
161
|
submit: 'Atualizar'
|
|
162
|
+
aria_label: 'Navegação de resultados'
|
|
159
163
|
sort:
|
|
160
164
|
label: 'Ordenar por %{field}'
|
|
161
165
|
submit: 'ordenar resultados'
|
data/config/routes.rb
CHANGED
|
@@ -7,7 +7,7 @@ Blacklight::Engine.routes.draw do
|
|
|
7
7
|
put "saved_searches/save/:id", :to => "saved_searches#save", :as => "save_search"
|
|
8
8
|
delete "saved_searches/forget/:id", :to => "saved_searches#forget", :as => "forget_search"
|
|
9
9
|
post "saved_searches/forget/:id", :to => "saved_searches#forget"
|
|
10
|
-
post "/catalog/:id/track", to: 'catalog#track', as: 'track_search_context'
|
|
10
|
+
post "/catalog/:id/track", to: 'catalog#track', as: 'track_search_context', constraints: { id: Blacklight::Engine.config.routes.identifier_constraint }
|
|
11
11
|
|
|
12
12
|
resources :suggest, only: :index, defaults: { format: 'json' }
|
|
13
13
|
end
|
data/lib/blacklight/engine.rb
CHANGED
|
@@ -7,7 +7,7 @@ module Blacklight
|
|
|
7
7
|
require 'twitter-typeahead-rails'
|
|
8
8
|
|
|
9
9
|
# BlacklightHelper is needed by all helpers, so we inject it
|
|
10
|
-
# into action view base here.
|
|
10
|
+
# into action view base here.
|
|
11
11
|
initializer 'blacklight.helpers' do |app|
|
|
12
12
|
ActionView::Base.send :include, BlacklightHelper
|
|
13
13
|
end
|
|
@@ -43,8 +43,12 @@ module Blacklight
|
|
|
43
43
|
'Cricket' => 'mms.mycricket.com'
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
+
config.routes = OpenStruct.new
|
|
47
|
+
# Set identifier_constraint to enforce a format for the document identifiers
|
|
48
|
+
config.routes.identifier_constraint = /[\w-]+/
|
|
49
|
+
|
|
46
50
|
config.bookmarks_http_method = :post
|
|
47
|
-
|
|
51
|
+
|
|
48
52
|
config.email_regexp = defined?(Devise) ? Devise.email_regexp : /\A[^@\s]+@[^@\s]+\z/
|
|
49
53
|
end
|
|
50
54
|
end
|
data/lib/blacklight/utils.rb
CHANGED
|
@@ -22,7 +22,7 @@ module Blacklight
|
|
|
22
22
|
def to_h
|
|
23
23
|
@table
|
|
24
24
|
end
|
|
25
|
-
|
|
25
|
+
|
|
26
26
|
def select *args, &block
|
|
27
27
|
self.class.new to_h.select(*args, &block)
|
|
28
28
|
end
|
|
@@ -58,7 +58,7 @@ module Blacklight
|
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
##
|
|
61
|
-
# An OpenStruct refinement that converts any hash-keys into
|
|
61
|
+
# An OpenStruct refinement that converts any hash-keys into
|
|
62
62
|
# additional instances of NestedOpenStructWithHashAccess
|
|
63
63
|
class NestedOpenStructWithHashAccess < OpenStructWithHashAccess
|
|
64
64
|
attr_reader :nested_class
|
|
@@ -161,7 +161,11 @@ module Blacklight
|
|
|
161
161
|
len = args.length
|
|
162
162
|
|
|
163
163
|
if len.zero?
|
|
164
|
-
new_ostruct_member
|
|
164
|
+
if respond_to?(:new_ostruct_member!, true)
|
|
165
|
+
new_ostruct_member!(mid)
|
|
166
|
+
else
|
|
167
|
+
new_ostruct_member(mid)
|
|
168
|
+
end
|
|
165
169
|
@table[mid]
|
|
166
170
|
else
|
|
167
171
|
super
|
data/solr/conf/schema.xml
CHANGED
|
@@ -308,7 +308,6 @@
|
|
|
308
308
|
<analyzer>
|
|
309
309
|
<tokenizer class="solr.StandardTokenizerFactory"/>
|
|
310
310
|
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
|
|
311
|
-
<filter class="solr.StandardFilterFactory"/>
|
|
312
311
|
<filter class="solr.LowerCaseFilterFactory"/>
|
|
313
312
|
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
|
|
314
313
|
</analyzer>
|
|
@@ -317,7 +316,6 @@
|
|
|
317
316
|
<fieldType class="solr.TextField" name="textSuggest" positionIncrementGap="100">
|
|
318
317
|
<analyzer>
|
|
319
318
|
<tokenizer class="solr.KeywordTokenizerFactory"/>
|
|
320
|
-
<filter class="solr.StandardFilterFactory"/>
|
|
321
319
|
<filter class="solr.LowerCaseFilterFactory"/>
|
|
322
320
|
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
|
|
323
321
|
</analyzer>
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
describe "Search Page" do
|
|
3
|
+
RSpec.describe "Search Page" do
|
|
4
|
+
it 'declares the page language in the html lang attribute' do
|
|
5
|
+
visit root_path
|
|
6
|
+
expect(page).to have_selector('html[lang=en]')
|
|
7
|
+
end
|
|
8
|
+
|
|
4
9
|
it "shows welcome" do
|
|
5
10
|
visit root_path
|
|
6
11
|
expect(page).to have_selector("input#q")
|
|
@@ -116,4 +121,3 @@ describe "Search Page" do
|
|
|
116
121
|
expect(page).to have_content "No results found for your search"
|
|
117
122
|
end
|
|
118
123
|
end
|
|
119
|
-
|
|
@@ -35,4 +35,14 @@ describe LayoutHelper do
|
|
|
35
35
|
expect(helper.container_classes).to eq 'container'
|
|
36
36
|
end
|
|
37
37
|
end
|
|
38
|
+
|
|
39
|
+
describe '#html_tag_attributes' do
|
|
40
|
+
before do
|
|
41
|
+
allow(I18n).to receive(:locale).and_return('x')
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'returns the current locale as the lang' do
|
|
45
|
+
expect(helper.html_tag_attributes).to include lang: 'x'
|
|
46
|
+
end
|
|
47
|
+
end
|
|
38
48
|
end
|
|
@@ -18,10 +18,34 @@ RSpec.describe SolrDocument do
|
|
|
18
18
|
it { is_expected.to eq ['Book'] }
|
|
19
19
|
end
|
|
20
20
|
end
|
|
21
|
-
|
|
21
|
+
|
|
22
22
|
describe "#id" do
|
|
23
23
|
subject { solrdoc.id }
|
|
24
24
|
it { is_expected.to eq '00282214' }
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
|
+
|
|
28
|
+
describe '.attribute' do
|
|
29
|
+
subject(:title) { document.title }
|
|
30
|
+
let(:doc_class) do
|
|
31
|
+
Class.new(SolrDocument) do
|
|
32
|
+
attribute :title, Blacklight::Types::String, 'title_tesim'
|
|
33
|
+
attribute :author, Blacklight::Types::Array, 'author_tesim'
|
|
34
|
+
attribute :date, Blacklight::Types::Date, 'date_dtsi'
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
let(:document) do
|
|
39
|
+
doc_class.new(id: '123',
|
|
40
|
+
title_tesim: ['Good Omens'],
|
|
41
|
+
author_tesim: ['Neil Gaiman', 'Terry Pratchett'],
|
|
42
|
+
date_dtsi: '1990-01-01T00:00:00Z')
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "casts the attributes" do
|
|
46
|
+
expect(document.title).to eq 'Good Omens'
|
|
47
|
+
expect(document.author).to eq ['Neil Gaiman', 'Terry Pratchett']
|
|
48
|
+
expect(document.date).to eq Date.new(1990)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
27
51
|
end
|
|
@@ -21,6 +21,22 @@ describe "Routing" do
|
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
+
describe 'tracking' do
|
|
25
|
+
context 'when the routing constraint is set to allow periods' do
|
|
26
|
+
before do
|
|
27
|
+
if Rails.version < '5.2.0'
|
|
28
|
+
skip 'requires https://github.com/rails/rails/pull/22435'
|
|
29
|
+
end
|
|
30
|
+
allow(Blacklight::Engine.config.routes).to receive(:identifier_constraint).and_return(%r{[^/]+})
|
|
31
|
+
Rails.application.reload_routes!
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'routes to #track' do
|
|
35
|
+
expect(post('/catalog/gallica.bnf.fr/track')).to route_to('catalog#track', id: 'gallica.bnf.fr')
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
24
40
|
|
|
25
41
|
describe "solr_document_path for SolrDocument", :test => true do
|
|
26
42
|
it "routes correctly" do
|
data/spec/spec_helper.rb
CHANGED
|
@@ -5,14 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
ENV["RAILS_ENV"] ||= 'test'
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
SimpleCov.formatter = Coveralls::SimpleCov::Formatter
|
|
13
|
-
SimpleCov.start do
|
|
14
|
-
add_filter "/spec/"
|
|
15
|
-
end
|
|
8
|
+
require 'simplecov'
|
|
9
|
+
SimpleCov.start do
|
|
10
|
+
add_filter "/spec/"
|
|
16
11
|
end
|
|
17
12
|
|
|
18
13
|
require 'rsolr'
|
|
@@ -25,20 +20,10 @@ require 'rspec/rails'
|
|
|
25
20
|
require 'rspec/its'
|
|
26
21
|
require 'rspec/collection_matchers'
|
|
27
22
|
require 'capybara/rspec'
|
|
28
|
-
require '
|
|
23
|
+
require 'webdrivers'
|
|
29
24
|
require 'equivalent-xml'
|
|
30
25
|
|
|
31
|
-
Capybara.javascript_driver = :
|
|
32
|
-
|
|
33
|
-
Capybara.register_driver :headless_chrome do |app|
|
|
34
|
-
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
|
|
35
|
-
chromeOptions: { args: %w[headless disable-gpu] }
|
|
36
|
-
)
|
|
37
|
-
|
|
38
|
-
Capybara::Selenium::Driver.new(app,
|
|
39
|
-
browser: :chrome,
|
|
40
|
-
desired_capabilities: capabilities)
|
|
41
|
-
end
|
|
26
|
+
Capybara.javascript_driver = :selenium_chrome_headless
|
|
42
27
|
|
|
43
28
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
|
44
29
|
# in spec/support/ and its subdirectories.
|
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: 6.
|
|
4
|
+
version: 6.24.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:
|
|
20
|
+
date: 2021-01-23 00:00:00.000000000 Z
|
|
21
21
|
dependencies:
|
|
22
22
|
- !ruby/object:Gem::Dependency
|
|
23
23
|
name: rails
|
|
@@ -234,19 +234,19 @@ dependencies:
|
|
|
234
234
|
- !ruby/object:Gem::Version
|
|
235
235
|
version: '4'
|
|
236
236
|
- !ruby/object:Gem::Dependency
|
|
237
|
-
name:
|
|
237
|
+
name: webdrivers
|
|
238
238
|
requirement: !ruby/object:Gem::Requirement
|
|
239
239
|
requirements:
|
|
240
|
-
- - "
|
|
240
|
+
- - "~>"
|
|
241
241
|
- !ruby/object:Gem::Version
|
|
242
|
-
version:
|
|
242
|
+
version: '3.0'
|
|
243
243
|
type: :development
|
|
244
244
|
prerelease: false
|
|
245
245
|
version_requirements: !ruby/object:Gem::Requirement
|
|
246
246
|
requirements:
|
|
247
|
-
- - "
|
|
247
|
+
- - "~>"
|
|
248
248
|
- !ruby/object:Gem::Version
|
|
249
|
-
version:
|
|
249
|
+
version: '3.0'
|
|
250
250
|
- !ruby/object:Gem::Dependency
|
|
251
251
|
name: selenium-webdriver
|
|
252
252
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -289,20 +289,6 @@ dependencies:
|
|
|
289
289
|
- - ">="
|
|
290
290
|
- !ruby/object:Gem::Version
|
|
291
291
|
version: '0'
|
|
292
|
-
- !ruby/object:Gem::Dependency
|
|
293
|
-
name: coveralls
|
|
294
|
-
requirement: !ruby/object:Gem::Requirement
|
|
295
|
-
requirements:
|
|
296
|
-
- - ">="
|
|
297
|
-
- !ruby/object:Gem::Version
|
|
298
|
-
version: '0'
|
|
299
|
-
type: :development
|
|
300
|
-
prerelease: false
|
|
301
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
302
|
-
requirements:
|
|
303
|
-
- - ">="
|
|
304
|
-
- !ruby/object:Gem::Version
|
|
305
|
-
version: '0'
|
|
306
292
|
- !ruby/object:Gem::Dependency
|
|
307
293
|
name: simplecov
|
|
308
294
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -478,6 +464,7 @@ files:
|
|
|
478
464
|
- app/presenters/blacklight/rendering/terminator.rb
|
|
479
465
|
- app/presenters/blacklight/show_presenter.rb
|
|
480
466
|
- app/services/blacklight/field_retriever.rb
|
|
467
|
+
- app/values/blacklight/types.rb
|
|
481
468
|
- app/views/_flash_msg.html.erb
|
|
482
469
|
- app/views/_user_util_links.html.erb
|
|
483
470
|
- app/views/blacklight/nav/_bookmark.html.erb
|
|
@@ -784,8 +771,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
784
771
|
- !ruby/object:Gem::Version
|
|
785
772
|
version: '0'
|
|
786
773
|
requirements: []
|
|
787
|
-
|
|
788
|
-
rubygems_version: 2.7.6
|
|
774
|
+
rubygems_version: 3.1.4
|
|
789
775
|
signing_key:
|
|
790
776
|
specification_version: 4
|
|
791
777
|
summary: Blacklight provides a discovery interface for any Solr (http://lucene.apache.org/solr)
|