blacklight 5.10.3 → 5.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +0 -2
- data/VERSION +1 -1
- data/app/assets/stylesheets/blacklight/_catalog.scss +1 -1
- data/app/helpers/blacklight/catalog_helper_behavior.rb +5 -0
- data/app/helpers/blacklight/component_helper_behavior.rb +4 -4
- data/app/helpers/blacklight/configuration_helper_behavior.rb +18 -5
- data/app/helpers/blacklight/url_helper_behavior.rb +1 -6
- data/app/views/bookmarks/index.html.erb +3 -3
- data/app/views/catalog/_bookmark_control.html.erb +1 -1
- data/app/views/catalog/_document_list.html.erb +2 -2
- data/app/views/catalog/_facet_layout.html.erb +2 -1
- data/app/views/catalog/_facets.html.erb +2 -1
- data/app/views/catalog/_home_text.html.erb +3 -3
- data/app/views/catalog/_index_header_default.html.erb +20 -17
- data/app/views/catalog/_sms_form.html.erb +1 -1
- data/app/views/catalog/_view_type_group.html.erb +3 -3
- data/app/views/layouts/blacklight.html.erb +2 -0
- data/app/views/saved_searches/index.html.erb +6 -4
- data/app/views/search_history/index.html.erb +3 -3
- data/lib/blacklight/configuration/facet_field.rb +1 -1
- data/lib/blacklight/configuration/search_field.rb +1 -1
- data/lib/blacklight/document.rb +6 -24
- data/lib/blacklight/document_presenter.rb +4 -2
- data/lib/blacklight/facet.rb +11 -11
- data/lib/blacklight/search_builder.rb +16 -6
- data/lib/blacklight/solr/search_builder.rb +3 -1
- data/spec/helpers/blacklight_helper_spec.rb +12 -1
- data/spec/helpers/catalog_helper_spec.rb +18 -0
- data/spec/helpers/configuration_helper_spec.rb +9 -7
- data/spec/helpers/facets_helper_spec.rb +4 -3
- data/spec/helpers/url_helper_spec.rb +0 -11
- data/spec/lib/blacklight/configuration_spec.rb +6 -33
- data/spec/lib/blacklight/facet_spec.rb +34 -0
- data/spec/lib/blacklight/search_builder_spec.rb +8 -0
- data/spec/lib/blacklight/solr/search_builder_spec.rb +7 -0
- data/spec/lib/document_presenter_spec.rb +7 -0
- data/spec/views/catalog/_document_list.html.erb_spec.rb +8 -3
- data/spec/views/catalog/_facets.html.erb_spec.rb +3 -3
- data/spec/views/catalog/_index_header_default.html.erb_spec.rb +22 -6
- data/spec/views/catalog/_view_type_group.html.erb_spec.rb +4 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 306445f3c792d11626c44500a5b30d974c01f5df
|
4
|
+
data.tar.gz: da7aa72df29cc2dd70ec8779d72928e8916d340a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 01e02b3b3605264f5bb0517a6abeec089e4b2eb8d96e604572808e6f805e59dfd448cedd6c35a311d436e2753ef6cc780e0fdf4d3c64e86101a6bab38fae1173
|
7
|
+
data.tar.gz: b95b6dc21666c74b2ba5c6103fc555300a559340efcc5e0b9315cf5f019c8de0d098e33d72cde8bfce43a0330fbab87d226697f6530783ebbd98dc1aa79ef586
|
data/.travis.yml
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
5.
|
1
|
+
5.11.0
|
@@ -223,6 +223,10 @@ module Blacklight::CatalogHelperBehavior
|
|
223
223
|
response ||= @response
|
224
224
|
@current_bookmarks ||= current_or_guest_user.bookmarks_for_documents(response.documents).to_a
|
225
225
|
end
|
226
|
+
|
227
|
+
def is_bookmarked? document
|
228
|
+
current_bookmarks.any? { |x| x.document_id == document.id and x.document_type == document.class }
|
229
|
+
end
|
226
230
|
|
227
231
|
def render_marc_tools
|
228
232
|
return unless defined? Blacklight::Marc
|
@@ -247,4 +251,5 @@ module Blacklight::CatalogHelperBehavior
|
|
247
251
|
def render_librarian_view_control? config, options = {}
|
248
252
|
respond_to? :librarian_view_catalog_path and options[:document] and options[:document].respond_to?(:to_marc)
|
249
253
|
end
|
254
|
+
|
250
255
|
end
|
@@ -29,8 +29,8 @@ module Blacklight
|
|
29
29
|
# @return [String]
|
30
30
|
def render_index_doc_actions(document, options={})
|
31
31
|
wrapping_class = options.delete(:wrapping_class) || "index-document-functions"
|
32
|
-
rendered = render_filtered_partials(blacklight_config.
|
33
|
-
content_tag("div", rendered, class: wrapping_class)
|
32
|
+
rendered = render_filtered_partials(blacklight_config.view_config(document_index_view_type).document_actions, { document: document }.merge(options))
|
33
|
+
content_tag("div", rendered, class: wrapping_class) unless rendered.blank?
|
34
34
|
end
|
35
35
|
|
36
36
|
##
|
@@ -42,8 +42,8 @@ module Blacklight
|
|
42
42
|
# @return [String]
|
43
43
|
def render_results_collection_tools(options = {})
|
44
44
|
wrapping_class = options.delete(:wrapping_class) || "search-widgets"
|
45
|
-
rendered = render_filtered_partials(blacklight_config.
|
46
|
-
content_tag("div", rendered, class: wrapping_class)
|
45
|
+
rendered = render_filtered_partials(blacklight_config.view_config(document_index_view_type).collection_actions, options)
|
46
|
+
content_tag("div", rendered, class: wrapping_class) unless rendered.blank?
|
47
47
|
end
|
48
48
|
|
49
49
|
def render_filtered_partials(partials, options={}, &block)
|
@@ -87,11 +87,24 @@ module Blacklight::ConfigurationHelperBehavior
|
|
87
87
|
# Look up the label for the facet field
|
88
88
|
def facet_field_label field
|
89
89
|
field_config = blacklight_config.facet_fields[field]
|
90
|
-
defaults = [:"blacklight.search.fields.facet.#{field}", :"blacklight.search.fields.#{field}"]
|
91
|
-
defaults << field_config.label if field_config
|
92
|
-
defaults << field.to_s.humanize
|
93
90
|
|
94
|
-
field_label
|
91
|
+
field_label(
|
92
|
+
:"blacklight.search.fields.facet.#{field}",
|
93
|
+
:"blacklight.search.fields.#{field}",
|
94
|
+
(field_config.label if field_config),
|
95
|
+
field.to_s.humanize
|
96
|
+
)
|
97
|
+
end
|
98
|
+
|
99
|
+
def view_label view
|
100
|
+
view_config = blacklight_config.view[view]
|
101
|
+
field_label(
|
102
|
+
:"blacklight.search.view_title.#{view}",
|
103
|
+
:"blacklight.search.view.#{view}",
|
104
|
+
view_config.label,
|
105
|
+
view_config.title,
|
106
|
+
view.to_s.humanize
|
107
|
+
)
|
95
108
|
end
|
96
109
|
|
97
110
|
##
|
@@ -107,7 +120,7 @@ module Blacklight::ConfigurationHelperBehavior
|
|
107
120
|
# @param [Symbol] any number of additional keys
|
108
121
|
# @param [Symbol] ...
|
109
122
|
def field_label *i18n_keys
|
110
|
-
first, *rest = i18n_keys
|
123
|
+
first, *rest = i18n_keys
|
111
124
|
|
112
125
|
t(first, default: rest)
|
113
126
|
end
|
@@ -82,15 +82,10 @@ module Blacklight::UrlHelperBehavior
|
|
82
82
|
return {}
|
83
83
|
end
|
84
84
|
|
85
|
-
{ :data => {:'context-href' =>
|
85
|
+
{ :data => {:'context-href' => track_solr_document_path(document, per_page: params.fetch(:per_page, search_session['per_page']), counter: counter, search_id: current_search_session.try(:id))}}
|
86
86
|
end
|
87
87
|
protected :session_tracking_params
|
88
88
|
|
89
|
-
##
|
90
|
-
# Get the URL for tracking search sessions across pages using polymorphic routing
|
91
|
-
def session_tracking_path document, params = {}
|
92
|
-
polymorphic_path([:track, document], params)
|
93
|
-
end
|
94
89
|
|
95
90
|
#
|
96
91
|
# link based helpers ->
|
@@ -1,13 +1,13 @@
|
|
1
1
|
<div id="content" class="col-md-12">
|
2
|
-
<h1><%= t('blacklight.bookmarks.title') %></h1>
|
2
|
+
<h1 class='page-heading'><%= t('blacklight.bookmarks.title') %></h1>
|
3
3
|
|
4
4
|
<%- if current_or_guest_user.blank? -%>
|
5
5
|
|
6
|
-
<h2><%= t('blacklight.bookmarks.need_login') %></h2>
|
6
|
+
<h2 class='section-heading'><%= t('blacklight.bookmarks.need_login') %></h2>
|
7
7
|
|
8
8
|
<%- elsif @document_list.blank? -%>
|
9
9
|
|
10
|
-
<h3><%= t('blacklight.bookmarks.no_bookmarks') %></h3>
|
10
|
+
<h3 class='section-heading'><%= t('blacklight.bookmarks.no_bookmarks') %></h3>
|
11
11
|
<% else %>
|
12
12
|
<%= link_to t('blacklight.bookmarks.clear.action_title'), clear_bookmarks_path, :method => :delete, :data => { :confirm => t('blacklight.bookmarks.clear.action_confirm') }, :class => 'clear-bookmarks btn btn-danger pull-right' %>
|
13
13
|
<%= render 'sort_and_per_page' %>
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# but it was simpler to leave them seperate instead of DRYing them, got confusing trying that.
|
5
5
|
# the data-doc-id attribute is used by our JS that converts to a checkbox/label.
|
6
6
|
-%>
|
7
|
-
<%
|
7
|
+
<% unless is_bookmarked? document %>
|
8
8
|
|
9
9
|
<%= form_tag( bookmark_path( document ), :method => :put, :class => "bookmark_toggle", "data-doc-id" => document.id, :'data-present' => t('blacklight.search.bookmarks.present'), :'data-absent' => t('blacklight.search.bookmarks.absent'), :'data-inprogress' => t('blacklight.search.bookmarks.inprogress')) do %>
|
10
10
|
<%= submit_tag(t('blacklight.bookmarks.add.button'), :id => "bookmark_toggle_#{document.id.to_s.parameterize}", :class => "bookmark_add") %>
|
@@ -1,6 +1,7 @@
|
|
1
1
|
<div class="panel panel-default facet_limit blacklight-<%= facet_field.key.parameterize %> <%= 'facet_limit-active' if facet_field_in_params?(facet_field.key) %>">
|
2
2
|
<div class="<%= "collapsed" if should_collapse_facet?(facet_field) %> collapse-toggle panel-heading" data-toggle="collapse" data-target="#<%= facet_field_id(facet_field) %>">
|
3
|
-
<h5 class="panel-title">
|
3
|
+
<h5 class="panel-title facet-field-heading">
|
4
|
+
|
4
5
|
<%= link_to facet_field_label(facet_field.key), "#", :"data-no-turbolink" => true %>
|
5
6
|
</h5>
|
6
7
|
</div>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<div class="page-header row">
|
2
|
-
<h1 class="col-md-8"><%= t('blacklight.welcome') %></h1>
|
2
|
+
<h1 class="col-md-8 page-heading"><%= t('blacklight.welcome') %></h1>
|
3
3
|
|
4
4
|
<ul class="nav nav-pills col-md-4">
|
5
5
|
<li><a href="https://github.com/projectblacklight/blacklight/">Github</a></li>
|
@@ -11,7 +11,7 @@
|
|
11
11
|
</div>
|
12
12
|
|
13
13
|
<div id="getting-started">
|
14
|
-
<h2>Here’s how to get started:</h2>
|
14
|
+
<h2 class='section-heading'>Here’s how to get started:</h2>
|
15
15
|
|
16
16
|
<ol>
|
17
17
|
<li>To modify this text, you need to <a href="http://guides.rubyonrails.org/engines.html#improving-engine-functionality">override the Blacklight-provided view</a>.
|
@@ -28,7 +28,7 @@ to your own application: <br />
|
|
28
28
|
|
29
29
|
<%# This is the same panel shown in the Rails welcome template %>
|
30
30
|
<div id="about">
|
31
|
-
<h3><a href="/rails/info/properties">About your application’s environment</a></h3>
|
31
|
+
<h3 class='section-heading'><a href="/rails/info/properties">About your application’s environment</a></h3>
|
32
32
|
<div id="about-content" class="well" style="display: none"></div>
|
33
33
|
</div>
|
34
34
|
|
@@ -1,19 +1,22 @@
|
|
1
|
+
<%# header bar for doc items in index view -%>
|
2
|
+
<div class="documentHeader row">
|
3
|
+
<%# main title container for doc partial view
|
4
|
+
How many bootstrap columns need to be reserved
|
5
|
+
for bookmarks control depends on size.
|
6
|
+
-%>
|
7
|
+
<% document_actions = capture do %>
|
8
|
+
<% # bookmark functions for items/docs -%>
|
9
|
+
<%= render_index_doc_actions document, wrapping_class: "index-document-functions col-sm-3 col-lg-2" %>
|
10
|
+
<% end %>
|
1
11
|
|
2
|
-
|
3
|
-
|
12
|
+
<h5 class="index_title document-title-heading <%= document_actions.present? ? "col-sm-9 col-lg-10" : "col-md-12" %>">
|
13
|
+
<% if counter = document_counter_with_offset(document_counter) %>
|
14
|
+
<span class="document-counter">
|
15
|
+
<%= t('blacklight.search.documents.counter', counter: counter) %>
|
16
|
+
</span>
|
17
|
+
<% end %>
|
18
|
+
<%= link_to_document document, document_show_link_field(document), counter: counter %>
|
19
|
+
</h5>
|
4
20
|
|
5
|
-
|
6
|
-
|
7
|
-
for bookmarks control depends on size.
|
8
|
-
-%>
|
9
|
-
<h5 class="index_title col-sm-9 col-lg-10">
|
10
|
-
<% counter = document_counter_with_offset(document_counter) %>
|
11
|
-
<span class="document-counter">
|
12
|
-
<%= t('blacklight.search.documents.counter', :counter => counter) if counter %>
|
13
|
-
</span>
|
14
|
-
<%= link_to_document document, document_show_link_field(document), :counter => counter %>
|
15
|
-
</h5>
|
16
|
-
|
17
|
-
<% # bookmark functions for items/docs -%>
|
18
|
-
<%= render_index_doc_actions document, :wrapping_class => "index-document-functions col-sm-3 col-lg-2" %>
|
19
|
-
</div>
|
21
|
+
<%= document_actions %>
|
22
|
+
</div>
|
@@ -3,9 +3,9 @@
|
|
3
3
|
<span class="sr-only"><%= t('blacklight.search.view_title') %></span>
|
4
4
|
<div class="view-type-group btn-group">
|
5
5
|
<% document_index_views.each do |view, config| %>
|
6
|
-
|
7
|
-
|
8
|
-
<span class="caption"><%=
|
6
|
+
<%= link_to url_for(params.merge(view: view)), title: view_label(view), class: "btn btn-default view-type-#{ view.to_s.parameterize } #{"active" if document_index_view_type == view}" do %>
|
7
|
+
<%= render_view_type_group_icon view %>
|
8
|
+
<span class="caption"><%= view_label(view) %></span>
|
9
9
|
<% end %>
|
10
10
|
<% end %>
|
11
11
|
</div>
|
@@ -36,6 +36,8 @@
|
|
36
36
|
<%= render partial: 'shared/ajax_modal' %>
|
37
37
|
|
38
38
|
<div id="main-container" class="container">
|
39
|
+
<%= content_tag :h1, application_name, class: 'sr-only application-heading' %>
|
40
|
+
|
39
41
|
<%= render :partial=>'/flash_msg', layout: 'shared/flash_messages' %>
|
40
42
|
|
41
43
|
<div class="row">
|
@@ -1,20 +1,22 @@
|
|
1
1
|
<div id="content" class="col-md-9">
|
2
|
-
|
2
|
+
|
3
|
+
<h1 class='page-heading'><%= t('blacklight.saved_searches.title') %></h1>
|
3
4
|
|
4
5
|
<%- if current_or_guest_user.blank? -%>
|
5
6
|
|
6
|
-
<h2><%= t('blacklight.saved_searches.need_login') %></h2>
|
7
|
+
<h2 class='section-heading'><%= t('blacklight.saved_searches.need_login') %></h2>
|
7
8
|
|
8
9
|
<%- elsif @searches.blank? -%>
|
9
10
|
|
10
|
-
<h2><%= t('blacklight.saved_searches.no_searches') %></h2>
|
11
|
+
<h2 class='section-heading'><%= t('blacklight.saved_searches.no_searches') %></h2>
|
11
12
|
|
12
13
|
<%- else -%>
|
13
14
|
<p>
|
14
15
|
<%= link_to t('blacklight.saved_searches.clear.action_title'), clear_saved_searches_path, :method => :delete, :data => { :confirm => t('blacklight.saved_searches.clear.action_confirm') } %>
|
15
16
|
</p>
|
16
17
|
|
17
|
-
<h2><%= t('blacklight.saved_searches.list_title') %></h2>
|
18
|
+
<h2 class='section-heading'><%= t('blacklight.saved_searches.list_title') %></h2>
|
19
|
+
|
18
20
|
<table class="table table-striped">
|
19
21
|
<%- @searches.each do |search| -%>
|
20
22
|
<tr>
|
@@ -1,10 +1,10 @@
|
|
1
1
|
<div id="content" class="col-md-12">
|
2
|
-
<h1><%=t('blacklight.search_history.title')%></h1>
|
2
|
+
<h1 class='page-heading'><%=t('blacklight.search_history.title')%></h1>
|
3
3
|
<%- if @searches.blank? -%>
|
4
|
-
<h2><%=t('blacklight.search_history.no_history')%></h2>
|
4
|
+
<h2 class='section-heading'><%=t('blacklight.search_history.no_history')%></h2>
|
5
5
|
<%- else -%>
|
6
6
|
<%= link_to t('blacklight.search_history.clear.action_title'), clear_search_history_path, :method => :delete, :data => { :confirm => t('blacklight.search_history.clear.action_confirm') }, :class => 'btn btn-danger pull-right' %>
|
7
|
-
<h3><%=t('blacklight.search_history.recent')%></h3>
|
7
|
+
<h3 class='section-heading'><%=t('blacklight.search_history.recent')%></h3>
|
8
8
|
<table class="table table-striped search_history">
|
9
9
|
<%- @searches.each_with_index do |search,index| -%>
|
10
10
|
<%= content_tag :tr, :id => "document_#{index + 1}" do %>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Blacklight
|
2
2
|
class Configuration::SearchField < Blacklight::Configuration::Field
|
3
3
|
def normalize! blacklight_config = nil
|
4
|
-
self.if
|
4
|
+
self.if ||= self.include_in_simple_select
|
5
5
|
|
6
6
|
super
|
7
7
|
self.qt ||= blacklight_config.default_solr_params[:qt] if blacklight_config && blacklight_config.default_solr_params
|
data/lib/blacklight/document.rb
CHANGED
@@ -31,7 +31,7 @@ module Blacklight::Document
|
|
31
31
|
include Blacklight::Document::Extensions
|
32
32
|
end
|
33
33
|
|
34
|
-
attr_reader :response
|
34
|
+
attr_reader :response
|
35
35
|
alias_method :solr_response, :response
|
36
36
|
|
37
37
|
def initialize(source_doc={}, response=nil)
|
@@ -52,23 +52,11 @@ module Blacklight::Document
|
|
52
52
|
# If a method is missing, it gets sent to @_source
|
53
53
|
# with all of the original params and block
|
54
54
|
def method_missing(m, *args, &b)
|
55
|
-
|
56
|
-
_source.send(m, *args, &b)
|
57
|
-
else
|
58
|
-
super
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def respond_to_missing? *args
|
63
|
-
(_source && _source.respond_to?(*args)) || super
|
55
|
+
@_source.send(m, *args, &b)
|
64
56
|
end
|
65
57
|
|
66
58
|
def [] *args
|
67
|
-
_source.send :[], *args
|
68
|
-
end
|
69
|
-
|
70
|
-
def _read_attribute(attr)
|
71
|
-
self[attr]
|
59
|
+
@_source.send :[], *args
|
72
60
|
end
|
73
61
|
|
74
62
|
# Helper method to check if value/multi-values exist for a given key.
|
@@ -93,7 +81,7 @@ module Blacklight::Document
|
|
93
81
|
end
|
94
82
|
|
95
83
|
def key? k
|
96
|
-
_source.key? k
|
84
|
+
@_source.key? k
|
97
85
|
end
|
98
86
|
|
99
87
|
# helper
|
@@ -124,7 +112,7 @@ module Blacklight::Document
|
|
124
112
|
end
|
125
113
|
|
126
114
|
def as_json(options = nil)
|
127
|
-
_source.as_json(options)
|
115
|
+
@_source.as_json(options)
|
128
116
|
end
|
129
117
|
|
130
118
|
def to_partial_path
|
@@ -147,12 +135,6 @@ module Blacklight::Document
|
|
147
135
|
nil
|
148
136
|
end
|
149
137
|
|
150
|
-
##
|
151
|
-
# Implementations that support More-Like-This should override this method
|
152
|
-
# to return an array of documents that are like this one.
|
153
|
-
def more_like_this
|
154
|
-
[]
|
155
|
-
end
|
156
138
|
|
157
139
|
# Certain class-level methods needed for the document-specific
|
158
140
|
# extendability architecture
|
@@ -171,4 +153,4 @@ module Blacklight::Document
|
|
171
153
|
self
|
172
154
|
end
|
173
155
|
end
|
174
|
-
end
|
156
|
+
end
|
@@ -155,9 +155,11 @@ module Blacklight
|
|
155
155
|
result.send(method)
|
156
156
|
end
|
157
157
|
end
|
158
|
-
|
158
|
+
when field_config
|
159
159
|
# regular solr
|
160
|
-
@document.get(field, :
|
160
|
+
@document.get(field_config.field, sep: nil)
|
161
|
+
when field
|
162
|
+
@document.get(field, sep: nil)
|
161
163
|
end
|
162
164
|
|
163
165
|
# rendering values
|
data/lib/blacklight/facet.rb
CHANGED
@@ -22,7 +22,7 @@ module Blacklight
|
|
22
22
|
def facet_configuration_for_field(field)
|
23
23
|
f = blacklight_config.facet_fields[field]
|
24
24
|
f ||= begin
|
25
|
-
_, value = blacklight_config.facet_fields.find { |k,v| v.field == field }
|
25
|
+
_, value = blacklight_config.facet_fields.find { |k,v| v.field.to_s == field.to_s }
|
26
26
|
value
|
27
27
|
end
|
28
28
|
f ||= Blacklight::Configuration::FacetField.new(:field => field).normalize!
|
@@ -30,29 +30,29 @@ module Blacklight
|
|
30
30
|
|
31
31
|
|
32
32
|
# Get a FacetField object from the @response
|
33
|
-
def facet_by_field_name
|
34
|
-
case
|
33
|
+
def facet_by_field_name field_or_field_name
|
34
|
+
case field_or_field_name
|
35
35
|
when String, Symbol
|
36
|
-
|
36
|
+
facet_field = facet_configuration_for_field(field_or_field_name)
|
37
|
+
extract_facet_by_field(facet_field)
|
37
38
|
when Blacklight::Configuration::FacetField
|
38
|
-
|
39
|
+
extract_facet_by_field(field_or_field_name)
|
39
40
|
else
|
40
|
-
|
41
|
+
field_or_field_name
|
41
42
|
end
|
42
43
|
end
|
43
44
|
|
44
45
|
private
|
45
46
|
|
46
47
|
# Get the solr response for the field :field
|
47
|
-
def
|
48
|
-
facet_field = facet_configuration_for_field(field_name)
|
48
|
+
def extract_facet_by_field facet_field
|
49
49
|
case
|
50
50
|
when (facet_field.respond_to?(:query) and facet_field.query)
|
51
|
-
create_facet_field_response_for_query_facet_field
|
51
|
+
create_facet_field_response_for_query_facet_field facet_field.key, facet_field
|
52
52
|
when (facet_field.respond_to?(:pivot) and facet_field.pivot)
|
53
|
-
create_facet_field_response_for_pivot_facet_field
|
53
|
+
create_facet_field_response_for_pivot_facet_field facet_field.key, facet_field
|
54
54
|
else
|
55
|
-
@response.facet_by_field_name(
|
55
|
+
@response.facet_by_field_name(facet_field.field)
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
@@ -3,12 +3,20 @@ module Blacklight
|
|
3
3
|
extend Deprecation
|
4
4
|
self.deprecation_horizon = "blacklight 6.0"
|
5
5
|
|
6
|
+
class_attribute :default_processor_chain
|
7
|
+
self.default_processor_chain = []
|
8
|
+
|
6
9
|
attr_reader :processor_chain, :blacklight_params
|
7
10
|
|
8
|
-
# @param [List<Symbol
|
11
|
+
# @param [List<Symbol>,TrueClass] processor_chain a list of filter methods to run or true, to use the default methods
|
9
12
|
# @param [Object] scope the scope where the filter methods reside in.
|
10
13
|
def initialize(processor_chain, scope)
|
11
|
-
@processor_chain = processor_chain
|
14
|
+
@processor_chain = if processor_chain === true
|
15
|
+
default_processor_chain.dup
|
16
|
+
else
|
17
|
+
processor_chain
|
18
|
+
end
|
19
|
+
|
12
20
|
@scope = scope
|
13
21
|
@blacklight_params = {}
|
14
22
|
end
|
@@ -56,8 +64,8 @@ module Blacklight
|
|
56
64
|
#
|
57
65
|
# Incoming parameter :f is mapped to :fq solr parameter.
|
58
66
|
def processed_parameters
|
59
|
-
|
60
|
-
|
67
|
+
request.tap do |request_parameters|
|
68
|
+
processor_chain.each do |method_name|
|
61
69
|
if scope.respond_to?(method_name, true)
|
62
70
|
Deprecation.warn Blacklight::SearchBuilder, "Building search parameters by calling #{method_name} on #{scope.class}. This behavior will be deprecated in Blacklight 6.0. Instead, define #{method_name} on a subclass of #{self.class} and set search_builder_class in the configuration"
|
63
71
|
scope.send(method_name, request_parameters, blacklight_params)
|
@@ -73,6 +81,10 @@ module Blacklight
|
|
73
81
|
end
|
74
82
|
|
75
83
|
protected
|
84
|
+
def request
|
85
|
+
Blacklight::Solr::Request.new
|
86
|
+
end
|
87
|
+
|
76
88
|
def page
|
77
89
|
if blacklight_params[:page].blank?
|
78
90
|
1
|
@@ -121,10 +133,8 @@ module Blacklight
|
|
121
133
|
field.include_in_request || (field.include_in_request.nil? && blacklight_config.add_field_configuration_to_solr_request)
|
122
134
|
end
|
123
135
|
|
124
|
-
protected
|
125
136
|
def scope
|
126
137
|
@scope
|
127
138
|
end
|
128
|
-
|
129
139
|
end
|
130
140
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module Blacklight::Solr
|
2
2
|
class SearchBuilder < Blacklight::SearchBuilder
|
3
|
-
|
3
|
+
|
4
|
+
self.default_processor_chain = [:default_solr_parameters, :add_query_to_solr, :add_facet_fq_to_solr, :add_facetting_to_solr, :add_solr_fields_to_query, :add_paging_to_solr, :add_sorting_to_solr, :add_group_config_to_solr ]
|
5
|
+
|
4
6
|
####
|
5
7
|
# Start with general defaults from BL config. Need to use custom
|
6
8
|
# merge to dup values, to avoid later mutating the original by mistake.
|
@@ -144,6 +144,17 @@ describe BlacklightHelper do
|
|
144
144
|
response = helper.render_index_doc_actions(document)
|
145
145
|
expect(response).to have_selector(".bookmark_toggle")
|
146
146
|
end
|
147
|
+
|
148
|
+
it "should be nil if no partials are renderable" do
|
149
|
+
allow(helper).to receive(:render_bookmarks_control?).and_return(false)
|
150
|
+
expect(helper.render_index_doc_actions(document)).to be_blank
|
151
|
+
end
|
152
|
+
|
153
|
+
it "should render view type specific actions" do
|
154
|
+
allow(helper).to receive(:document_index_view_type).and_return(:custom)
|
155
|
+
config.view.custom.document_actions = []
|
156
|
+
expect(helper.render_index_doc_actions(document)).to be_blank
|
157
|
+
end
|
147
158
|
end
|
148
159
|
|
149
160
|
describe "render_show_doc_actions" do
|
@@ -608,7 +619,7 @@ describe BlacklightHelper do
|
|
608
619
|
|
609
620
|
it "should ignore missing templates" do
|
610
621
|
response = helper.render_document_index_with_view :view_type, [obj1, obj1]
|
611
|
-
expect(response).to
|
622
|
+
expect(response).to have_selector "div#documents"
|
612
623
|
end
|
613
624
|
end
|
614
625
|
|
@@ -305,4 +305,22 @@ describe CatalogHelper do
|
|
305
305
|
end
|
306
306
|
end
|
307
307
|
|
308
|
+
describe "#is_bookmarked?" do
|
309
|
+
|
310
|
+
let(:bookmark) { Bookmark.new document: bookmarked_document }
|
311
|
+
let(:bookmarked_document) { SolrDocument.new(id: 'a') }
|
312
|
+
|
313
|
+
before do
|
314
|
+
allow(helper).to receive(:current_bookmarks).and_return([bookmark])
|
315
|
+
end
|
316
|
+
|
317
|
+
it "should be bookmarked if the document is in the bookmarks" do
|
318
|
+
expect(helper.is_bookmarked?(bookmarked_document)).to eq true
|
319
|
+
end
|
320
|
+
|
321
|
+
it "should not be bookmarked if the document is not listed in the bookmarks" do
|
322
|
+
expect(helper.is_bookmarked?(SolrDocument.new(id: 'b'))).to eq false
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
308
326
|
end
|
@@ -137,6 +137,15 @@ describe BlacklightConfigurationHelper do
|
|
137
137
|
end
|
138
138
|
end
|
139
139
|
|
140
|
+
describe "#view_label" do
|
141
|
+
it "should look up the label to display for the view" do
|
142
|
+
allow(blacklight_config).to receive(:view).and_return({ "my_view" => double(label: "some label", title: nil) })
|
143
|
+
allow(helper).to receive(:field_label).with(:"blacklight.search.view_title.my_view", :"blacklight.search.view.my_view", "some label", nil, "My view")
|
144
|
+
|
145
|
+
helper.view_label "my_view"
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
140
149
|
describe "#field_label" do
|
141
150
|
it "should look up the label as an i18n string" do
|
142
151
|
allow(helper).to receive(:t).with(:some_key, default: []).and_return "my label"
|
@@ -150,13 +159,6 @@ describe BlacklightConfigurationHelper do
|
|
150
159
|
|
151
160
|
label = helper.field_label :key_a, :key_b, "default text"
|
152
161
|
end
|
153
|
-
|
154
|
-
it "should compact nil keys (fixes rails/rails#19419)" do
|
155
|
-
allow(helper).to receive(:t).with(:key_a, default: [:key_b])
|
156
|
-
|
157
|
-
label = helper.field_label :key_a, nil, :key_b
|
158
|
-
|
159
|
-
end
|
160
162
|
end
|
161
163
|
|
162
164
|
describe "#default_per_page" do
|
@@ -107,7 +107,7 @@ describe FacetsHelper do
|
|
107
107
|
|
108
108
|
describe "facet_by_field_name" do
|
109
109
|
it "should retrieve the facet from the response given a string" do
|
110
|
-
facet_config = double(:query => nil)
|
110
|
+
facet_config = double(:query => nil, field: 'a')
|
111
111
|
facet_field = double()
|
112
112
|
allow(helper).to receive(:facet_configuration_for_field).with(anything()).and_return(facet_config)
|
113
113
|
|
@@ -118,7 +118,7 @@ describe FacetsHelper do
|
|
118
118
|
end
|
119
119
|
|
120
120
|
it "should also work for facet query fields" do
|
121
|
-
facet_config = double(:query => {})
|
121
|
+
facet_config = double(:query => {}, key: 'a_query_facet_field')
|
122
122
|
allow(helper).to receive(:facet_configuration_for_field).with('a_query_facet_field').and_return(facet_config)
|
123
123
|
allow(helper).to receive(:create_facet_field_response_for_query_facet_field).with('a_query_facet_field', facet_config)
|
124
124
|
|
@@ -128,6 +128,7 @@ describe FacetsHelper do
|
|
128
128
|
describe "query facets" do
|
129
129
|
let(:facet_config) {
|
130
130
|
double(
|
131
|
+
key: 'my_query_facet_field',
|
131
132
|
:query => {
|
132
133
|
'a_simple_query' => { :fq => 'field:search', :label => 'A Human Readable label'},
|
133
134
|
'another_query' => { :fq => 'field:different_search', :label => 'Label'},
|
@@ -165,7 +166,7 @@ describe FacetsHelper do
|
|
165
166
|
|
166
167
|
describe "pivot facets" do
|
167
168
|
let(:facet_config) {
|
168
|
-
double(:pivot
|
169
|
+
double(key: 'my_pivot_facet_field', pivot: ['field_a', 'field_b'])
|
169
170
|
}
|
170
171
|
|
171
172
|
before(:each) do
|
@@ -449,15 +449,4 @@ describe BlacklightUrlHelper do
|
|
449
449
|
expect(url).to eq helper.bookmarks_url(format: :html, encrypted_user_id: 'xyz')
|
450
450
|
end
|
451
451
|
end
|
452
|
-
|
453
|
-
describe "#session_tracking_path" do
|
454
|
-
let(:document) { SolrDocument.new(id: 1) }
|
455
|
-
it "should determine the correct route for the document class" do
|
456
|
-
expect(helper.session_tracking_path(document)).to eq helper.track_solr_document_path(document)
|
457
|
-
end
|
458
|
-
|
459
|
-
it "should pass through tracking parameters" do
|
460
|
-
expect(helper.session_tracking_path(document, x: 1)).to eq helper.track_solr_document_path(document, x: 1)
|
461
|
-
end
|
462
|
-
end
|
463
452
|
end
|
@@ -213,25 +213,11 @@ describe "Blacklight::Configuration" do
|
|
213
213
|
"another_field_facet" => {},
|
214
214
|
"a_facet_field" => {},
|
215
215
|
})
|
216
|
-
expect { |b| @config.
|
217
|
-
expect(@config.facet_fields.keys).to eq ["some_field_facet", "another_field_facet"]
|
218
|
-
end
|
219
|
-
|
220
|
-
describe "if/unless conditions with legacy show parameter" do
|
221
|
-
it "should be hidden if the if condition is false" do
|
222
|
-
expect(@config.add_facet_field("hidden", if: false).if).to eq false
|
223
|
-
expect(@config.add_facet_field("hidden_with_legacy", if: false, show: true).if).to eq false
|
224
|
-
end
|
225
|
-
|
226
|
-
it "should be true if the if condition is true" do
|
227
|
-
expect(@config.add_facet_field("hidden", if: true).if).to eq true
|
228
|
-
expect(@config.add_facet_field("hidden_with_legacy", if: true, show: false).if).to eq true
|
229
|
-
end
|
216
|
+
expect { |b| @config.add_index_field "*_facet", &b }.to yield_control.twice
|
230
217
|
|
231
|
-
|
232
|
-
expect(@config.add_facet_field("hidden", show: true).if).to eq true
|
233
|
-
end
|
218
|
+
expect(@config.index_fields.keys).to eq ["some_field_facet", "another_field_facet"]
|
234
219
|
end
|
220
|
+
|
235
221
|
end
|
236
222
|
|
237
223
|
describe "add_index_field" do
|
@@ -275,6 +261,7 @@ describe "Blacklight::Configuration" do
|
|
275
261
|
|
276
262
|
expect(@config.index_fields.keys).to eq ["some_field_display", "another_field_display"]
|
277
263
|
end
|
264
|
+
|
278
265
|
end
|
279
266
|
|
280
267
|
describe "add_show_field" do
|
@@ -383,22 +370,8 @@ describe "Blacklight::Configuration" do
|
|
383
370
|
|
384
371
|
expect(@config.search_fields["author_name"].label).to eq "Author Name"
|
385
372
|
end
|
386
|
-
|
387
|
-
|
388
|
-
it "should be hidden if the if condition is false" do
|
389
|
-
expect(@config.add_search_field("hidden", if: false).if).to eq false
|
390
|
-
expect(@config.add_search_field("hidden_with_legacy", if: false, include_in_simple_search: true).if).to eq false
|
391
|
-
end
|
392
|
-
|
393
|
-
it "should be true if the if condition is true" do
|
394
|
-
expect(@config.add_search_field("hidden", if: true).if).to eq true
|
395
|
-
expect(@config.add_search_field("hidden_with_legacy", if: true, include_in_simple_search: false).if).to eq true
|
396
|
-
end
|
397
|
-
|
398
|
-
it "should be true if the if condition is missing" do
|
399
|
-
expect(@config.add_search_field("hidden", include_in_simple_search: true).if).to eq true
|
400
|
-
end
|
401
|
-
end
|
373
|
+
|
374
|
+
|
402
375
|
end
|
403
376
|
|
404
377
|
describe "add_sort_field" do
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Blacklight::Facet do
|
4
|
+
subject do
|
5
|
+
Class.new do
|
6
|
+
include Blacklight::Facet
|
7
|
+
attr_reader :blacklight_config
|
8
|
+
|
9
|
+
def initialize blacklight_config
|
10
|
+
@blacklight_config = blacklight_config
|
11
|
+
end
|
12
|
+
end.new(blacklight_config)
|
13
|
+
end
|
14
|
+
|
15
|
+
let(:blacklight_config) { Blacklight::Configuration.new }
|
16
|
+
|
17
|
+
describe "#facet_configuration_for_field" do
|
18
|
+
it "should look up fields by key" do
|
19
|
+
blacklight_config.add_facet_field 'a'
|
20
|
+
expect(subject.facet_configuration_for_field('a')).to eq blacklight_config.facet_fields['a']
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should look up fields by field name" do
|
24
|
+
blacklight_config.add_facet_field 'a', field: 'b'
|
25
|
+
expect(subject.facet_configuration_for_field('b')).to eq blacklight_config.facet_fields['a']
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should support both strings and symbols" do
|
29
|
+
blacklight_config.add_facet_field 'a', field: :b
|
30
|
+
expect(subject.facet_configuration_for_field('b')).to eq blacklight_config.facet_fields['a']
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -5,6 +5,14 @@ describe Blacklight::SearchBuilder do
|
|
5
5
|
let(:blacklight_config) { Blacklight::Configuration.new }
|
6
6
|
let(:scope) { double blacklight_config: blacklight_config }
|
7
7
|
subject { described_class.new processor_chain, scope }
|
8
|
+
|
9
|
+
context "with default processor chain" do
|
10
|
+
subject { described_class.new true, scope }
|
11
|
+
it "should use the class-level default_processor_chain" do
|
12
|
+
expect(subject.processor_chain).to eq []
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
8
16
|
describe "#with" do
|
9
17
|
it "should set the blacklight params" do
|
10
18
|
params = {}
|
@@ -17,6 +17,13 @@ describe Blacklight::Solr::SearchBuilder do
|
|
17
17
|
|
18
18
|
subject { search_builder.with(user_params) }
|
19
19
|
|
20
|
+
context "with default processor chain" do
|
21
|
+
subject { described_class.new true, context }
|
22
|
+
it "should use the class-level default_processor_chain" do
|
23
|
+
expect(subject.processor_chain).to eq described_class.default_processor_chain
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
20
27
|
context "with a complex parameter environment" do
|
21
28
|
subject { search_builder.with(user_params).processed_parameters }
|
22
29
|
|
@@ -19,6 +19,7 @@ describe Blacklight::DocumentPresenter do
|
|
19
19
|
config.add_index_field 'solr_doc_accessor', :accessor => true
|
20
20
|
config.add_index_field 'explicit_accessor', :accessor => :solr_doc_accessor
|
21
21
|
config.add_index_field 'explicit_accessor_with_arg', :accessor => :solr_doc_accessor_with_arg
|
22
|
+
config.add_index_field 'alias', field: 'qwer'
|
22
23
|
end
|
23
24
|
end
|
24
25
|
it "should check for an explicit value" do
|
@@ -96,6 +97,12 @@ describe Blacklight::DocumentPresenter do
|
|
96
97
|
value = subject.render_index_field_value 'explicit_accessor_with_arg'
|
97
98
|
expect(value).to eq "123"
|
98
99
|
end
|
100
|
+
|
101
|
+
it "should support solr field configuration" do
|
102
|
+
allow(document).to receive(:get).with('qwer', :sep => nil).and_return('document qwer value')
|
103
|
+
value = subject.render_index_field_value 'alias'
|
104
|
+
expect(value).to eq "document qwer value"
|
105
|
+
end
|
99
106
|
end
|
100
107
|
|
101
108
|
describe "render_document_show_field_value" do
|
@@ -1,8 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe "
|
4
|
-
|
5
|
-
|
3
|
+
describe "catalog/_document_list", type: :view do
|
6
4
|
|
5
|
+
before do
|
6
|
+
allow(view).to receive_messages(document_index_view_type: "some-view", documents: [])
|
7
|
+
end
|
7
8
|
|
9
|
+
it "should include a class for the current view" do
|
10
|
+
render
|
11
|
+
expect(rendered).to have_selector(".documents-some-view")
|
12
|
+
end
|
8
13
|
end
|
@@ -31,20 +31,20 @@ describe "catalog/_facets" do
|
|
31
31
|
:facet_limit_for => 10 )
|
32
32
|
|
33
33
|
@response = double()
|
34
|
-
allow(@response).to receive(:facet_by_field_name).with(
|
34
|
+
allow(@response).to receive(:facet_by_field_name).with("facet_field_1") { @mock_display_facet_1 }
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should have a header" do
|
38
38
|
allow(view).to receive_messages(:render_facet_partials => '')
|
39
39
|
render
|
40
|
-
expect(rendered).to have_selector('
|
40
|
+
expect(rendered).to have_selector('.facets-heading')
|
41
41
|
end
|
42
42
|
|
43
43
|
|
44
44
|
describe "facet display" do
|
45
45
|
it "should have a(n accessible) header" do
|
46
46
|
render
|
47
|
-
expect(rendered).to have_selector('
|
47
|
+
expect(rendered).to have_selector('.facet-field-heading')
|
48
48
|
end
|
49
49
|
|
50
50
|
it "should list values" do
|
@@ -9,15 +9,31 @@ describe "catalog/_index_header_default" do
|
|
9
9
|
Blacklight::Configuration.new
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
assign :response, double(:
|
14
|
-
allow(view).to receive(:current_search_session).and_return nil
|
15
|
-
allow(view).to receive(:search_session).and_return({})
|
12
|
+
before do
|
13
|
+
assign :response, double(params: {})
|
16
14
|
allow(view).to receive(:render_grouped_response?).and_return false
|
17
15
|
allow(view).to receive(:blacklight_config).and_return(blacklight_config)
|
18
|
-
allow(view).to receive(:
|
19
|
-
|
16
|
+
allow(view).to receive(:current_search_session).and_return nil
|
17
|
+
allow(view).to receive(:search_session).and_return({})
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should render the document header" do
|
21
|
+
allow(view).to receive(:render_index_doc_actions)
|
22
|
+
render partial: "catalog/index_header_default", locals: {document: document, document_counter: 1}
|
20
23
|
expect(rendered).to have_selector('.document-counter', text: "2")
|
21
24
|
end
|
22
25
|
|
26
|
+
it "should allow the title to take the whole space if no document tools are rendered" do
|
27
|
+
allow(view).to receive(:render_index_doc_actions)
|
28
|
+
render partial: "catalog/index_header_default", locals: {document: document, document_counter: 1}
|
29
|
+
expect(rendered).to have_selector '.index_title.col-md-12'
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should give the document actions space if present" do
|
33
|
+
allow(view).to receive(:render_index_doc_actions).and_return("DOCUMENT ACTIONS")
|
34
|
+
render partial: "catalog/index_header_default", locals: {document: document, document_counter: 1}
|
35
|
+
expect(rendered).to have_selector '.index_title.col-sm-9'
|
36
|
+
expect(rendered).to have_content "DOCUMENT ACTIONS"
|
37
|
+
end
|
38
|
+
|
23
39
|
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: 5.
|
4
|
+
version: 5.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Rochkind
|
@@ -17,7 +17,7 @@ authors:
|
|
17
17
|
autorequire:
|
18
18
|
bindir: bin
|
19
19
|
cert_chain: []
|
20
|
-
date: 2015-03-
|
20
|
+
date: 2015-03-17 00:00:00.000000000 Z
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
23
|
name: rails
|
@@ -519,6 +519,7 @@ files:
|
|
519
519
|
- spec/lib/blacklight/document/email_spec.rb
|
520
520
|
- spec/lib/blacklight/document/sms_spec.rb
|
521
521
|
- spec/lib/blacklight/facet_paginator_spec.rb
|
522
|
+
- spec/lib/blacklight/facet_spec.rb
|
522
523
|
- spec/lib/blacklight/routes_spec.rb
|
523
524
|
- spec/lib/blacklight/search_builder_spec.rb
|
524
525
|
- spec/lib/blacklight/search_fields_spec.rb
|
@@ -637,6 +638,7 @@ test_files:
|
|
637
638
|
- spec/lib/blacklight/document/email_spec.rb
|
638
639
|
- spec/lib/blacklight/document/sms_spec.rb
|
639
640
|
- spec/lib/blacklight/facet_paginator_spec.rb
|
641
|
+
- spec/lib/blacklight/facet_spec.rb
|
640
642
|
- spec/lib/blacklight/routes_spec.rb
|
641
643
|
- spec/lib/blacklight/search_builder_spec.rb
|
642
644
|
- spec/lib/blacklight/search_fields_spec.rb
|