blacklight 5.4.0 → 5.5.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/VERSION +1 -1
- data/app/assets/javascripts/blacklight/ajax_modal.js +37 -20
- data/app/assets/javascripts/blacklight/checkbox_submit.js +7 -2
- data/app/assets/stylesheets/blacklight/_catalog.css.scss +6 -2
- data/app/helpers/blacklight/blacklight_helper_behavior.rb +3 -1
- data/app/helpers/blacklight/configuration_helper_behavior.rb +18 -0
- data/app/helpers/blacklight/facets_helper_behavior.rb +25 -1
- data/app/helpers/blacklight/render_constraints_helper_behavior.rb +8 -17
- data/app/views/catalog/_constraints_element.html.erb +24 -25
- data/app/views/catalog/_facet_limit.html.erb +5 -14
- data/app/views/catalog/_search_results.html.erb +25 -0
- data/app/views/catalog/index.html.erb +9 -38
- data/blacklight.gemspec +2 -1
- data/lib/blacklight/request_builders.rb +1 -0
- data/lib/blacklight/solr/facet_paginator.rb +52 -30
- data/spec/helpers/facets_helper_spec.rb +48 -19
- data/spec/helpers/render_constraints_helper_spec.rb +22 -6
- data/spec/lib/blacklight/facet_paginator_spec.rb +50 -58
- data/spec/lib/blacklight/solr_helper_spec.rb +8 -0
- data/spec/spec_helper.rb +2 -9
- data/spec/views/catalog/_constraints_element.html.erb_spec.rb +6 -4
- data/template.demo.rb +9 -5
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fac08d13bf67f849e356efeeea75395d3dd66b44
|
4
|
+
data.tar.gz: 1ed742c6ae84f16f1361950eb4fdcdc7dbfb38f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b8106b0abf9286780e5446572ac0d47e375d75f628981086cd9101f6b994688ba9cc4f3329319be812edece3723c974be889f2a488cda8ae60929383bf1ff775
|
7
|
+
data.tar.gz: 5addaec1c1bfaf038aa6b1c010ec4942c40059345d344a805c4f062e47cce95eff2e15969ec6ddc3c7288ce0790453f06da79bab42ceca5b64964b7c4ff3e014
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
5.
|
1
|
+
5.5.0
|
@@ -102,27 +102,44 @@ Blacklight.ajaxModal.containerSelector = "[data-ajax-modal~=container]";
|
|
102
102
|
|
103
103
|
Blacklight.ajaxModal.modalCloseSelector = "[data-ajax-modal~=close], span.ajax-close-modal";
|
104
104
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
}
|
116
|
-
|
117
|
-
$(Blacklight.ajaxModal.modalSelector).find('.modal-content').html(contents);
|
118
|
-
|
119
|
-
// send custom event with the modal dialog div as the target
|
120
|
-
var e = $.Event('loaded.blacklight.ajax-modal')
|
121
|
-
$(Blacklight.ajaxModal.modalSelector).trigger(e);
|
122
|
-
// if they did preventDefault, don't show the dialog
|
123
|
-
if (e.isDefaultPrevented()) return;
|
105
|
+
// Called on fatal failure of ajax load, function returns content
|
106
|
+
// to show to user in modal. Right now called only for extreme
|
107
|
+
// network errors.
|
108
|
+
Blacklight.ajaxModal.onFailure = function(data) {
|
109
|
+
var contents = "<div class='modal-header'>" +
|
110
|
+
"<button type='button' class='close' data-dismiss='modal' aria-hidden='true'>×</button>" +
|
111
|
+
"Network Error</div>";
|
112
|
+
$(Blacklight.ajaxModal.modalSelector).find('.modal-content').html(contents);
|
113
|
+
$(Blacklight.ajaxModal.modalSelector).modal('show');
|
114
|
+
}
|
124
115
|
|
125
|
-
|
116
|
+
Blacklight.ajaxModal.receiveAjax = function (data) {
|
117
|
+
if (data.readyState == 0) {
|
118
|
+
// Network error, could not contact server.
|
119
|
+
Blacklight.ajaxModal.onFailure(data)
|
120
|
+
}
|
121
|
+
else {
|
122
|
+
var contents = data.responseText;
|
123
|
+
|
124
|
+
// does it have a data- selector for container?
|
125
|
+
// important we don't execute script tags, we shouldn't.
|
126
|
+
// code modelled off of JQuery ajax.load. https://github.com/jquery/jquery/blob/master/src/ajax/load.js?source=c#L62
|
127
|
+
var container = $("<div>").
|
128
|
+
append( jQuery.parseHTML(contents) ).find( Blacklight.ajaxModal.containerSelector ).first();
|
129
|
+
if (container.size() !== 0) {
|
130
|
+
contents = container.html();
|
131
|
+
}
|
132
|
+
|
133
|
+
$(Blacklight.ajaxModal.modalSelector).find('.modal-content').html(contents);
|
134
|
+
|
135
|
+
// send custom event with the modal dialog div as the target
|
136
|
+
var e = $.Event('loaded.blacklight.ajax-modal')
|
137
|
+
$(Blacklight.ajaxModal.modalSelector).trigger(e);
|
138
|
+
// if they did preventDefault, don't show the dialog
|
139
|
+
if (e.isDefaultPrevented()) return;
|
140
|
+
|
141
|
+
$(Blacklight.ajaxModal.modalSelector).modal('show');
|
142
|
+
}
|
126
143
|
};
|
127
144
|
|
128
145
|
|
@@ -13,6 +13,8 @@
|
|
13
13
|
attribute (HTML5-style doc-*) that contains the id/primary key
|
14
14
|
of the object in question -- used by plugin for a unique value for
|
15
15
|
DOM id's.
|
16
|
+
|
17
|
+
Uses HTML for a checkbox compatible with Bootstrap 3.
|
16
18
|
|
17
19
|
Pass in options for your class name and labels:
|
18
20
|
$("form.something").bl_checkbox_submit({
|
@@ -54,7 +56,6 @@
|
|
54
56
|
.attr("id", options.css_class + "_" + unique_id);
|
55
57
|
var label = $('<label>')
|
56
58
|
.addClass( options.css_class )
|
57
|
-
.addClass('checkbox')
|
58
59
|
.attr("for", options.css_class + '_' + unique_id)
|
59
60
|
.attr("title", form.attr("title") || "");
|
60
61
|
var span = $('<span>');
|
@@ -62,6 +63,10 @@
|
|
62
63
|
label.append(checkbox);
|
63
64
|
label.append(" ");
|
64
65
|
label.append(span);
|
66
|
+
|
67
|
+
var checkbox_div = $("<div class='checkbox' />")
|
68
|
+
.addClass(options.css_class)
|
69
|
+
.append(label);
|
65
70
|
|
66
71
|
function update_state_for(state) {
|
67
72
|
checkbox.prop("checked", state);
|
@@ -77,7 +82,7 @@
|
|
77
82
|
}
|
78
83
|
}
|
79
84
|
|
80
|
-
form.append(
|
85
|
+
form.append(checkbox_div);
|
81
86
|
update_state_for(checked);
|
82
87
|
|
83
88
|
checkbox.click(function() {
|
@@ -56,13 +56,17 @@ span.constraints-label {
|
|
56
56
|
&:hover, &:active {
|
57
57
|
background-color: $btn-default-bg;
|
58
58
|
border-color: $btn-default-border;
|
59
|
+
box-shadow: none;
|
59
60
|
}
|
60
61
|
}
|
61
62
|
|
62
63
|
.filterName:after
|
63
64
|
{
|
64
65
|
@extend .text-muted;
|
65
|
-
|
66
|
+
font-family: 'Glyphicons Halflings';
|
67
|
+
/* glyphicon-chevron-right */
|
68
|
+
content: "\e080";
|
69
|
+
font-size: 70%;
|
66
70
|
padding-left: $caret-width-base;
|
67
71
|
}
|
68
72
|
|
@@ -185,4 +189,4 @@ label.toggle_bookmark
|
|
185
189
|
.caption {
|
186
190
|
@extend .sr-only;
|
187
191
|
}
|
188
|
-
}
|
192
|
+
}
|
@@ -505,7 +505,9 @@ module Blacklight::BlacklightHelperBehavior
|
|
505
505
|
# XXX rather than handling this logic through exceptions, maybe there's a Rails internals method
|
506
506
|
# for determining if a partial template exists..
|
507
507
|
begin
|
508
|
-
|
508
|
+
partial = str % { action_name: base_name, format: format, index_view_type: document_index_view_type }
|
509
|
+
logger.debug "Looking for document partial #{partial}"
|
510
|
+
return render partial: partial, locals: locals.merge(document: doc)
|
509
511
|
rescue ActionView::MissingTemplate
|
510
512
|
nil
|
511
513
|
end
|
@@ -37,6 +37,24 @@ module Blacklight::ConfigurationHelperBehavior
|
|
37
37
|
blacklight_config.show_fields
|
38
38
|
end
|
39
39
|
|
40
|
+
##
|
41
|
+
# Return a label for the currently selected search field.
|
42
|
+
# If no "search_field" or the default (e.g. "all_fields") is selected, then return nil
|
43
|
+
# Otherwise grab the label of the selected search field.
|
44
|
+
# @param [Hash] query parameters
|
45
|
+
# @return [String]
|
46
|
+
def constraint_query_label(localized_params = params)
|
47
|
+
label_for_search_field(localized_params[:search_field]) unless default_search_field?(localized_params[:search_field])
|
48
|
+
end
|
49
|
+
|
50
|
+
##
|
51
|
+
# Is the search form using the default search field ("all_fields" by default)?
|
52
|
+
# @param [String] the currently selected search_field
|
53
|
+
# @return [Boolean]
|
54
|
+
def default_search_field?(selected_search_field)
|
55
|
+
selected_search_field.blank? || (default_search_field && selected_search_field == default_search_field[:key])
|
56
|
+
end
|
57
|
+
|
40
58
|
##
|
41
59
|
# Look up the label for the index field
|
42
60
|
def index_field_label document, field
|
@@ -50,6 +50,27 @@ module Blacklight::FacetsHelperBehavior
|
|
50
50
|
render(options)
|
51
51
|
end
|
52
52
|
|
53
|
+
##
|
54
|
+
# Renders the list of values
|
55
|
+
# removes any elements where render_facet_item returns a nil value. This enables an application
|
56
|
+
# to filter undesireable facet items so they don't appear in the UI
|
57
|
+
def render_facet_limit_list(paginator, solr_field, wrapping_element=:li)
|
58
|
+
safe_join(paginator.items.
|
59
|
+
map { |item| render_facet_item(solr_field, item) }.compact.
|
60
|
+
map { |item| content_tag(wrapping_element,item)}
|
61
|
+
)
|
62
|
+
end
|
63
|
+
|
64
|
+
##
|
65
|
+
# Renders a single facet item
|
66
|
+
def render_facet_item(solr_field, item)
|
67
|
+
if facet_in_params?( solr_field, item.value )
|
68
|
+
render_selected_facet_value(solr_field, item)
|
69
|
+
else
|
70
|
+
render_facet_value(solr_field, item)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
53
74
|
##
|
54
75
|
# Determine if Blacklight should render the display_facet or not
|
55
76
|
#
|
@@ -77,7 +98,10 @@ module Blacklight::FacetsHelperBehavior
|
|
77
98
|
end
|
78
99
|
|
79
100
|
##
|
80
|
-
#
|
101
|
+
# The name of the partial to use to render a facet field.
|
102
|
+
# uses the value of the "partial" field if set in the facet configuration
|
103
|
+
# otherwise uses "facet_pivot" if this facet is a pivot facet
|
104
|
+
# defaults to 'facet_limit'
|
81
105
|
#
|
82
106
|
# @return [String]
|
83
107
|
def facet_partial_name(display_facet = nil)
|
@@ -33,21 +33,12 @@ module Blacklight::RenderConstraintsHelperBehavior
|
|
33
33
|
# @return [String]
|
34
34
|
def render_constraints_query(localized_params = params)
|
35
35
|
# So simple don't need a view template, we can just do it here.
|
36
|
-
if
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
render_constraint_element(label,
|
45
|
-
localized_params[:q],
|
46
|
-
:classes => ["query"],
|
47
|
-
:remove => url_for(localized_params.merge(:q=>nil, :action=>'index')))
|
48
|
-
else
|
49
|
-
"".html_safe
|
50
|
-
end
|
36
|
+
return "".html_safe if localized_params[:q].blank?
|
37
|
+
|
38
|
+
render_constraint_element(constraint_query_label(localized_params),
|
39
|
+
localized_params[:q],
|
40
|
+
:classes => ["query"],
|
41
|
+
:remove => url_for(localized_params.merge(:q=>nil, :action=>'index')))
|
51
42
|
end
|
52
43
|
|
53
44
|
##
|
@@ -76,8 +67,8 @@ module Blacklight::RenderConstraintsHelperBehavior
|
|
76
67
|
facet_config = facet_configuration_for_field(facet)
|
77
68
|
|
78
69
|
safe_join(values.map do |val|
|
79
|
-
|
80
|
-
|
70
|
+
next if val.blank? # skip empty string
|
71
|
+
render_constraint_element( facet_field_label(facet), facet_display_value(facet, val),
|
81
72
|
:remove => search_action_path(remove_facet_params(facet, val, localized_params)),
|
82
73
|
:classes => ["filter", "filter-" + facet.parameterize]
|
83
74
|
)
|
@@ -1,34 +1,33 @@
|
|
1
|
-
|
2
|
-
# label
|
1
|
+
<% # local params:
|
2
|
+
# label
|
3
3
|
# value
|
4
4
|
# options =>
|
5
5
|
# :remove => url for a remove constraint link
|
6
6
|
# :classes => array of classes to add to container span
|
7
7
|
options ||= {}
|
8
|
-
|
8
|
+
%>
|
9
9
|
|
10
10
|
<span class="btn-group appliedFilter constraint <%= options[:classes].join(" ") if options[:classes] %>">
|
11
|
-
<
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
11
|
+
<span class="constraint-value btn btn-sm btn-default btn-disabled">
|
12
|
+
<% unless label.blank? %>
|
13
|
+
<span class="filterName"><%= label %></span>
|
14
|
+
<% end %>
|
15
|
+
<% unless value.blank? %>
|
16
|
+
<span class="filterValue"><%= value %></span>
|
17
|
+
<% end %>
|
18
|
+
</span>
|
19
|
+
<% unless options[:remove].blank? %>
|
20
|
+
<% accessible_remove_label = content_tag :span, class: 'sr-only' do
|
21
|
+
if label.blank?
|
22
|
+
t('blacklight.search.filters.remove.value', value: value)
|
23
|
+
else
|
24
|
+
t('blacklight.search.filters.remove.label_value', label: label, value: value)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
%>
|
19
28
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
else
|
25
|
-
t('blacklight.search.filters.remove.label_value', :label => label, :value => value)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
%>
|
29
|
-
|
30
|
-
<%= link_to(content_tag(:span, '', :class => 'glyphicon glyphicon-remove') + accessible_remove_label,
|
31
|
-
options[:remove], :class => 'btn btn-default btn-sm remove dropdown-toggle'
|
32
|
-
) %>
|
33
|
-
<%- end -%>
|
29
|
+
<%= link_to(content_tag(:span, '', class: 'glyphicon glyphicon-remove') + accessible_remove_label,
|
30
|
+
options[:remove], class: 'btn btn-default btn-sm remove dropdown-toggle'
|
31
|
+
) %>
|
32
|
+
<%- end -%>
|
34
33
|
</span>
|
@@ -1,18 +1,9 @@
|
|
1
1
|
<ul class="facet-values list-unstyled">
|
2
|
-
<% paginator = facet_paginator(facet_field, display_facet)
|
3
|
-
%>
|
4
|
-
<% paginator.items.each do |item| -%>
|
5
|
-
<li>
|
6
|
-
<% if facet_in_params?( solr_field, item.value ) %>
|
7
|
-
<%= render_selected_facet_value(solr_field, item) %>
|
8
|
-
<% else %>
|
9
|
-
<%= render_facet_value(solr_field, item) %>
|
10
|
-
<% end -%>
|
11
|
-
</li>
|
12
|
-
<% end %>
|
2
|
+
<% paginator = facet_paginator(facet_field, display_facet) %>
|
3
|
+
<%= render_facet_limit_list paginator, solr_field %>
|
13
4
|
|
14
|
-
<%
|
15
|
-
<li class="more_facets_link"><%= link_to
|
5
|
+
<% unless paginator.last_page? || params[:action] == "facet" %>
|
6
|
+
<li class="more_facets_link"><%= link_to t('blacklight.search.facets.more'),
|
7
|
+
params.merge(id: solr_field, action: "facet", page: nil), class: "more_facets_link" %></li>
|
16
8
|
<% end %>
|
17
|
-
|
18
9
|
</ul>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<h2 class="sr-only top-content-title"><%= t('blacklight.search.search_results_header') %></h2>
|
2
|
+
|
3
|
+
<% @page_title = t('blacklight.search.title', :application_name => application_name) %>
|
4
|
+
|
5
|
+
|
6
|
+
<% content_for(:head) do -%>
|
7
|
+
<%= render_opensearch_response_metadata %>
|
8
|
+
<%= auto_discovery_link_tag(:rss, url_for(params.merge(:format => 'rss')), :title => t('blacklight.search.rss_feed') ) %>
|
9
|
+
<%= auto_discovery_link_tag(:atom, url_for(params.merge(:format => 'atom')), :title => t('blacklight.search.atom_feed') ) %>
|
10
|
+
<% end -%>
|
11
|
+
|
12
|
+
|
13
|
+
<%= render 'search_header' %>
|
14
|
+
|
15
|
+
<h2 class="sr-only"><%= t('blacklight.search.search_results') %></h2>
|
16
|
+
|
17
|
+
<%- if @response.empty? %>
|
18
|
+
<%= render "zero_results" %>
|
19
|
+
<%- elsif render_grouped_response? %>
|
20
|
+
<%= render_grouped_document_index %>
|
21
|
+
<%- else %>
|
22
|
+
<%= render_document_index %>
|
23
|
+
<%- end %>
|
24
|
+
|
25
|
+
<%= render 'results_pagination' %>
|
@@ -1,41 +1,12 @@
|
|
1
|
-
<div id="sidebar" class="col-md-3">
|
2
|
-
|
1
|
+
<div id="sidebar" class="col-md-3 col-sm-4">
|
2
|
+
<%= render 'search_sidebar' %>
|
3
3
|
</div>
|
4
4
|
|
5
|
-
<div id="content" class="col-md-9">
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
<h2 class="sr-only top-content-title"><%= t('blacklight.search.search_results_header') %></h2>
|
13
|
-
|
14
|
-
<% @page_title = t('blacklight.search.title', :application_name => application_name) %>
|
15
|
-
|
16
|
-
|
17
|
-
<% content_for(:head) do -%>
|
18
|
-
<%= render_opensearch_response_metadata %>
|
19
|
-
<%= auto_discovery_link_tag(:rss, url_for(params.merge(:format => 'rss')), :title => t('blacklight.search.rss_feed') ) %>
|
20
|
-
<%= auto_discovery_link_tag(:atom, url_for(params.merge(:format => 'atom')), :title => t('blacklight.search.atom_feed') ) %>
|
21
|
-
<% end -%>
|
22
|
-
|
23
|
-
|
24
|
-
<%= render 'search_header' %>
|
25
|
-
|
26
|
-
<h2 class="sr-only"><%= t('blacklight.search.search_results') %></h2>
|
27
|
-
|
28
|
-
<%- if @response.empty? %>
|
29
|
-
<%= render "zero_results" %>
|
30
|
-
<%- elsif render_grouped_response? %>
|
31
|
-
<%= render_grouped_document_index %>
|
32
|
-
<%- else %>
|
33
|
-
<%= render_document_index %>
|
34
|
-
<%- end %>
|
35
|
-
|
36
|
-
<%= render 'results_pagination' %>
|
37
|
-
|
38
|
-
|
39
|
-
<% end %>
|
40
|
-
|
5
|
+
<div id="content" class="col-md-9 col-sm-8">
|
6
|
+
<% unless has_search_parameters? %>
|
7
|
+
<%# if there are no input/search related params, display the "home" partial -%>
|
8
|
+
<%= render 'home' %>
|
9
|
+
<% else %>
|
10
|
+
<%= render 'search_results' %>
|
11
|
+
<% end %>
|
41
12
|
</div>
|
data/blacklight.gemspec
CHANGED
@@ -26,7 +26,8 @@ Gem::Specification.new do |s|
|
|
26
26
|
|
27
27
|
s.add_development_dependency "jettywrapper", ">= 1.7.0"
|
28
28
|
s.add_development_dependency "blacklight-marc", "~> 5.0"
|
29
|
-
s.add_development_dependency "rspec-rails"
|
29
|
+
s.add_development_dependency "rspec-rails", "~> 2.99"
|
30
|
+
s.add_development_dependency "rspec-its"
|
30
31
|
s.add_development_dependency "capybara"
|
31
32
|
s.add_development_dependency "poltergeist"
|
32
33
|
s.add_development_dependency 'engine_cart', ">= 0.1.0"
|
@@ -121,6 +121,7 @@ module Blacklight
|
|
121
121
|
|
122
122
|
f_request_params.each_pair do |facet_field, value_list|
|
123
123
|
Array(value_list).each do |value|
|
124
|
+
next if value.blank? # skip empty strings
|
124
125
|
solr_parameters.append_filter_query facet_value_to_fq_string(facet_field, value)
|
125
126
|
end
|
126
127
|
end
|
@@ -12,6 +12,10 @@ module Blacklight::Solr
|
|
12
12
|
# so we cannot know how many "pages" there are.
|
13
13
|
#
|
14
14
|
class FacetPaginator
|
15
|
+
extend Deprecation
|
16
|
+
|
17
|
+
self.deprecation_horizon = 'blacklight version 6.0.0'
|
18
|
+
|
15
19
|
# What request keys will we use for the parameters need. Need to
|
16
20
|
# make sure they do NOT conflict with catalog/index request params,
|
17
21
|
# and need to make them accessible in a list so we can easily
|
@@ -21,7 +25,7 @@ module Blacklight::Solr
|
|
21
25
|
class << self; attr_accessor :request_keys end # create a class method
|
22
26
|
def request_keys ; self.class.request_keys ; end # shortcut
|
23
27
|
|
24
|
-
attr_reader :
|
28
|
+
attr_reader :total_count, :items, :offset, :limit, :sort
|
25
29
|
|
26
30
|
# all_facet_values is a list of facet value objects returned by solr,
|
27
31
|
# asking solr for n+1 facet values.
|
@@ -33,54 +37,72 @@ module Blacklight::Solr
|
|
33
37
|
def initialize(all_facet_values, arguments)
|
34
38
|
# to_s.to_i will conveniently default to 0 if nil
|
35
39
|
@offset = arguments[:offset].to_s.to_i
|
36
|
-
@limit = arguments[:limit].to_s.to_i
|
40
|
+
@limit = arguments[:limit].to_s.to_i
|
37
41
|
# count is solr's default
|
38
42
|
@sort = arguments[:sort] || "count"
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
else # nil limit
|
46
|
-
@items = all_facet_values
|
47
|
-
@has_next = false
|
48
|
-
@has_previous = false
|
49
|
-
end
|
43
|
+
@total_count = all_facet_values.size
|
44
|
+
@items = items_for_limit(all_facet_values)
|
45
|
+
end
|
46
|
+
|
47
|
+
def prev_page
|
48
|
+
current_page - 1 unless first_page?
|
50
49
|
end
|
51
50
|
|
52
51
|
def current_page
|
53
|
-
|
52
|
+
if limit == 0 #check for divide by zero
|
53
|
+
1
|
54
|
+
else
|
55
|
+
@offset / limit + 1
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def next_page
|
60
|
+
current_page + 1 unless last_page?
|
54
61
|
end
|
55
62
|
|
63
|
+
#@deprecated
|
56
64
|
def has_next?
|
57
|
-
|
65
|
+
!last_page?
|
58
66
|
end
|
67
|
+
deprecation_deprecate :has_next?
|
59
68
|
|
69
|
+
#@deprecated
|
60
70
|
def has_previous?
|
61
|
-
|
71
|
+
!first_page?
|
62
72
|
end
|
73
|
+
deprecation_deprecate :has_next?
|
63
74
|
|
64
75
|
def last_page?
|
65
|
-
|
76
|
+
current_page >= total_pages
|
66
77
|
end
|
67
78
|
|
68
79
|
def first_page?
|
69
|
-
|
80
|
+
current_page == 1
|
70
81
|
end
|
71
82
|
|
83
|
+
def total_pages
|
84
|
+
if limit == 0 #check for divide by zero
|
85
|
+
1
|
86
|
+
else
|
87
|
+
(total_count.to_f / limit).ceil
|
88
|
+
end
|
89
|
+
end
|
72
90
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
91
|
+
# Pass in a desired solr facet solr key ('count' or 'index', see
|
92
|
+
# http://wiki.apache.org/solr/SimpleFacetParameters#facet.limit
|
93
|
+
# under facet.sort ), and your current request params.
|
94
|
+
# Get back params suitable to passing to an ActionHelper method for
|
95
|
+
# creating a url, to resort by that method.
|
96
|
+
def params_for_resort_url(sort_method, params)
|
97
|
+
# When resorting, we've got to reset the offset to start at beginning,
|
98
|
+
# no way to make it make sense otherwise.
|
99
|
+
params.merge(request_keys[:sort] => sort_method, request_keys[:page] => nil)
|
100
|
+
end
|
101
|
+
|
102
|
+
private
|
103
|
+
# setting limit to 0 implies no limit
|
104
|
+
def items_for_limit(values)
|
105
|
+
limit != 0 ? values.slice(offset, limit) : values
|
106
|
+
end
|
84
107
|
end
|
85
|
-
|
86
108
|
end
|
@@ -17,7 +17,7 @@ describe FacetsHelper do
|
|
17
17
|
empty = double(:items => [])
|
18
18
|
|
19
19
|
fields = [a,b,empty]
|
20
|
-
expect(helper.has_facet_values?(fields)).to
|
20
|
+
expect(helper.has_facet_values?(fields)).to be true
|
21
21
|
end
|
22
22
|
|
23
23
|
it "should be false if all facets are empty" do
|
@@ -25,7 +25,7 @@ describe FacetsHelper do
|
|
25
25
|
empty = double(:items => [])
|
26
26
|
|
27
27
|
fields = [empty]
|
28
|
-
expect(helper.has_facet_values?(fields)).to
|
28
|
+
expect(helper.has_facet_values?(fields)).to be false
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -45,37 +45,37 @@ describe FacetsHelper do
|
|
45
45
|
|
46
46
|
it "should render facets with items" do
|
47
47
|
a = double(:items => [1,2], :name=>'basic_field')
|
48
|
-
expect(helper.should_render_facet?(a)).to
|
48
|
+
expect(helper.should_render_facet?(a)).to be true
|
49
49
|
end
|
50
50
|
it "should not render facets without items" do
|
51
51
|
empty = double(:items => [], :name=>'basic_field')
|
52
|
-
expect(helper.should_render_facet?(empty)).to
|
52
|
+
expect(helper.should_render_facet?(empty)).to be false
|
53
53
|
end
|
54
54
|
|
55
55
|
it "should not render facets where show is set to false" do
|
56
56
|
a = double(:items => [1,2], :name=>'no_show')
|
57
|
-
expect(helper.should_render_facet?(a)).to
|
57
|
+
expect(helper.should_render_facet?(a)).to be false
|
58
58
|
end
|
59
59
|
|
60
60
|
it "should call a helper to determine if it should render a field" do
|
61
61
|
helper.stub(:my_helper => true)
|
62
62
|
a = double(:items => [1,2], :name=>'helper_show')
|
63
|
-
expect(helper.should_render_facet?(a)).to
|
63
|
+
expect(helper.should_render_facet?(a)).to be true
|
64
64
|
end
|
65
65
|
|
66
66
|
it "should call a helper to determine if it should render a field" do
|
67
67
|
a = double(:items => [1,2], :name=>'helper_with_an_arg_show')
|
68
68
|
helper.should_receive(:my_helper_with_an_arg).with(@config.facet_fields['helper_with_an_arg_show'], a).and_return(true)
|
69
|
-
expect(helper.should_render_facet?(a)).to
|
69
|
+
expect(helper.should_render_facet?(a)).to be true
|
70
70
|
end
|
71
71
|
|
72
72
|
|
73
73
|
it "should evaluate a Proc to determine if it should render a field" do
|
74
74
|
a = double(:items => [1,2], :name=>'lambda_show')
|
75
|
-
expect(helper.should_render_facet?(a)).to
|
75
|
+
expect(helper.should_render_facet?(a)).to be true
|
76
76
|
|
77
77
|
a = double(:items => [1,2], :name=>'lambda_no_show')
|
78
|
-
expect(helper.should_render_facet?(a)).to
|
78
|
+
expect(helper.should_render_facet?(a)).to be false
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
@@ -90,17 +90,17 @@ describe FacetsHelper do
|
|
90
90
|
end
|
91
91
|
|
92
92
|
it "should be collapsed by default" do
|
93
|
-
expect(helper.should_collapse_facet?(@config.facet_fields['basic_field'])).to
|
93
|
+
expect(helper.should_collapse_facet?(@config.facet_fields['basic_field'])).to be true
|
94
94
|
end
|
95
95
|
|
96
96
|
it "should not be collapsed if the configuration says so" do
|
97
|
-
expect(helper.should_collapse_facet?(@config.facet_fields['no_collapse'])).to
|
97
|
+
expect(helper.should_collapse_facet?(@config.facet_fields['no_collapse'])).to be false
|
98
98
|
end
|
99
99
|
|
100
100
|
it "should not be collapsed if it is in the params" do
|
101
101
|
params[:f] = { basic_field: [1], no_collapse: [2] }.with_indifferent_access
|
102
|
-
expect(helper.should_collapse_facet?(@config.facet_fields['basic_field'])).to
|
103
|
-
expect(helper.should_collapse_facet?(@config.facet_fields['no_collapse'])).to
|
102
|
+
expect(helper.should_collapse_facet?(@config.facet_fields['basic_field'])).to be false
|
103
|
+
expect(helper.should_collapse_facet?(@config.facet_fields['no_collapse'])).to be false
|
104
104
|
end
|
105
105
|
|
106
106
|
end
|
@@ -152,7 +152,7 @@ describe FacetsHelper do
|
|
152
152
|
field.should be_a_kind_of Blacklight::SolrResponse::Facets::FacetField
|
153
153
|
|
154
154
|
expect(field.name).to eq'my_query_facet_field'
|
155
|
-
expect(field.items).to
|
155
|
+
expect(field.items.size).to eq 2
|
156
156
|
expect(field.items.map { |x| x.value }).to_not include 'field:not_appearing_in_the_config'
|
157
157
|
|
158
158
|
facet_item = field.items.select { |x| x.value == 'a_simple_query' }.first
|
@@ -180,11 +180,11 @@ describe FacetsHelper do
|
|
180
180
|
|
181
181
|
expect(field.name).to eq 'my_pivot_facet_field'
|
182
182
|
|
183
|
-
expect(field.items).to
|
183
|
+
expect(field.items.size).to eq 1
|
184
184
|
|
185
185
|
expect(field.items.first).to respond_to(:items)
|
186
186
|
|
187
|
-
expect(field.items.first.items).to
|
187
|
+
expect(field.items.first.items.size).to eq 1
|
188
188
|
expect(field.items.first.items.first.fq).to eq({ 'field_a' => 'a' })
|
189
189
|
end
|
190
190
|
end
|
@@ -281,11 +281,40 @@ describe FacetsHelper do
|
|
281
281
|
end
|
282
282
|
end
|
283
283
|
|
284
|
+
describe "render_facet_limit_list" do
|
285
|
+
let(:f1) { Blacklight::SolrResponse::Facets::FacetItem.new(hits: '792', value: 'Book') }
|
286
|
+
let(:f2) { Blacklight::SolrResponse::Facets::FacetItem.new(hits: '65', value: 'Musical Score') }
|
287
|
+
let(:paginator) { Blacklight::Solr::FacetPaginator.new([f1, f2], limit: 10) }
|
288
|
+
subject { helper.render_facet_limit_list(paginator, 'type_solr_field') }
|
289
|
+
before do
|
290
|
+
allow(helper).to receive(:search_action_path) do |*args|
|
291
|
+
catalog_index_path *args
|
292
|
+
end
|
293
|
+
end
|
294
|
+
it "should draw a list of elements" do
|
295
|
+
expect(subject).to have_selector 'li', count: 2
|
296
|
+
expect(subject).to have_selector 'li:first-child a.facet_select', text: 'Book'
|
297
|
+
expect(subject).to have_selector 'li:nth-child(2) a.facet_select', text: 'Musical Score'
|
298
|
+
end
|
299
|
+
|
300
|
+
context "when one of the facet items is rendered as nil" do
|
301
|
+
# An app may override render_facet_item to filter out some undesired facet items by returning nil.
|
302
|
+
|
303
|
+
before { allow(helper).to receive(:render_facet_item).and_return("<a class=\"facet_select\">Book</a>".html_safe, nil) }
|
304
|
+
|
305
|
+
it "should draw a list of elements" do
|
306
|
+
expect(subject).to have_selector 'li', count: 1
|
307
|
+
expect(subject).to have_selector 'li:first-child a.facet_select', text: 'Book'
|
308
|
+
end
|
309
|
+
|
310
|
+
end
|
311
|
+
end
|
312
|
+
|
284
313
|
describe "facet_field_in_params?" do
|
285
314
|
it "should check if the facet field is selected in the user params" do
|
286
315
|
helper.stub(:params => { :f => { "some-field" => ["x"]}})
|
287
|
-
expect(helper.facet_field_in_params?("some-field")).to
|
288
|
-
expect(helper.facet_field_in_params?("other-field")).to_not
|
316
|
+
expect(helper.facet_field_in_params?("some-field")).to be_truthy
|
317
|
+
expect(helper.facet_field_in_params?("other-field")).to_not be true
|
289
318
|
end
|
290
319
|
end
|
291
320
|
|
@@ -300,7 +329,7 @@ describe FacetsHelper do
|
|
300
329
|
helper.should_receive(:facet_display_value).and_return('Z')
|
301
330
|
helper.should_receive(:add_facet_params_and_redirect).and_return({controller:'catalog'})
|
302
331
|
|
303
|
-
helper.
|
332
|
+
allow(helper).to receive(:search_action_path) do |*args|
|
304
333
|
catalog_index_path *args
|
305
334
|
end
|
306
335
|
end
|
@@ -2,6 +2,12 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe RenderConstraintsHelper do
|
4
4
|
|
5
|
+
let(:config) do
|
6
|
+
Blacklight::Configuration.new do |config|
|
7
|
+
config.add_facet_field 'type'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
5
11
|
before do
|
6
12
|
# the helper methods below infer paths from the current route
|
7
13
|
controller.request.path_parameters["controller"] = 'catalog'
|
@@ -18,15 +24,25 @@ describe RenderConstraintsHelper do
|
|
18
24
|
|
19
25
|
describe '#render_filter_element' do
|
20
26
|
before do
|
21
|
-
|
22
|
-
|
23
|
-
end
|
24
|
-
helper.stub(:blacklight_config => @config)
|
27
|
+
allow(helper).to receive(:blacklight_config).and_return(config)
|
28
|
+
expect(helper).to receive(:facet_field_label).with('type').and_return("Item Type")
|
25
29
|
end
|
30
|
+
subject { helper.render_filter_element('type', ['journal'], {:q=>'biz'}) }
|
31
|
+
|
26
32
|
it "should have a link relative to the current url" do
|
27
|
-
|
28
|
-
expect(
|
33
|
+
expect(subject).to have_link "Remove constraint Item Type: journal", href: "/catalog?q=biz"
|
34
|
+
expect(subject).to have_selector ".filterName", text: 'Item Type'
|
29
35
|
end
|
30
36
|
end
|
31
37
|
|
38
|
+
describe "#render_constraints_filters" do
|
39
|
+
before do
|
40
|
+
allow(helper).to receive(:blacklight_config).and_return(config)
|
41
|
+
end
|
42
|
+
subject { helper.render_constraints_filters(:f=>{'type'=>['']}) }
|
43
|
+
|
44
|
+
it "should render nothing for empty facet limit param" do
|
45
|
+
expect(subject).to be_blank
|
46
|
+
end
|
47
|
+
end
|
32
48
|
end
|
@@ -1,75 +1,67 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'Blacklight::Solr::FacetPaginator' do
|
4
|
-
before(:all) do
|
5
|
-
require 'yaml'
|
6
|
-
@seven_facet_values = YAML::load("--- \n- !ruby/object:Blacklight::SolrResponse::Facets::FacetItem \n hits: 792\n value: Book\n- !ruby/object:Blacklight::SolrResponse::Facets::FacetItem \n hits: 65\n value: Musical Score\n- !ruby/object:Blacklight::SolrResponse::Facets::FacetItem \n hits: 58\n value: Serial\n- !ruby/object:Blacklight::SolrResponse::Facets::FacetItem \n hits: 48\n value: Musical Recording\n- !ruby/object:Blacklight::SolrResponse::Facets::FacetItem \n hits: 37\n value: Microform\n- !ruby/object:Blacklight::SolrResponse::Facets::FacetItem \n hits: 27\n value: Thesis\n- !ruby/object:Blacklight::SolrResponse::Facets::FacetItem \n hits: 0\n value: \n")
|
7
|
-
@six_facet_values = @seven_facet_values.slice(1,6)
|
8
|
-
@limit = 6
|
9
4
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
5
|
+
let(:f1) { Blacklight::SolrResponse::Facets::FacetItem.new(hits: '792', value: 'Book') }
|
6
|
+
let(:f2) { Blacklight::SolrResponse::Facets::FacetItem.new(hits: '65', value: 'Musical Score') }
|
7
|
+
let(:f3) { Blacklight::SolrResponse::Facets::FacetItem.new(hits: '58', value: 'Serial') }
|
8
|
+
let(:f4) { Blacklight::SolrResponse::Facets::FacetItem.new(hits: '48', value: 'Musical Recording') }
|
9
|
+
let(:f5) { Blacklight::SolrResponse::Facets::FacetItem.new(hits: '37', value: 'Microform') }
|
10
|
+
let(:f6) { Blacklight::SolrResponse::Facets::FacetItem.new(hits: '27', value: 'Thesis') }
|
11
|
+
let(:f7) { Blacklight::SolrResponse::Facets::FacetItem.new(hits: '0') }
|
12
|
+
let(:seven_facet_values) { [f1, f2, f3, f4, f5, f6, f7] }
|
13
|
+
let(:six_facet_values) { [f1, f2, f3, f4, f5, f6] }
|
14
|
+
let(:limit) { 6 }
|
20
15
|
|
16
|
+
context 'on the first page of two pages' do
|
17
|
+
subject { Blacklight::Solr::FacetPaginator.new(seven_facet_values, limit: limit) }
|
18
|
+
it { should be_first_page }
|
19
|
+
it { should_not be_last_page }
|
20
|
+
its(:current_page) { should eq 1 }
|
21
|
+
its(:prev_page) { should be_nil }
|
22
|
+
its(:next_page) { should eq 2 }
|
23
|
+
it 'should limit items to limit, if limit is smaller than items.length' do
|
24
|
+
expect(subject.items.size).to eq 6
|
25
|
+
end
|
21
26
|
end
|
22
|
-
it 'should not have next when there are fewer results' do
|
23
|
-
paginator = Blacklight::Solr::FacetPaginator.new(@six_facet_values, :offset => 0, :limit => @limit)
|
24
27
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
expect(@paginator).to have_previous
|
28
|
+
context 'on the last page of two pages' do
|
29
|
+
subject { Blacklight::Solr::FacetPaginator.new(seven_facet_values, offset: 6, limit: limit) }
|
30
|
+
it { should_not be_first_page }
|
31
|
+
it { should be_last_page }
|
32
|
+
its(:current_page) { should eq 2 }
|
33
|
+
its(:prev_page) { should eq 1 }
|
34
|
+
its(:next_page) { should be_nil }
|
35
|
+
it 'should return all items when limit is greater than items.length' do
|
36
|
+
expect(subject.items.size).to eq 1
|
35
37
|
end
|
36
|
-
|
37
38
|
end
|
38
|
-
it 'should not have previous when offset is 0' do
|
39
|
-
paginator = Blacklight::Solr::FacetPaginator.new(@seven_facet_values, :offset => 0, :limit => @limit)
|
40
39
|
|
41
|
-
|
40
|
+
context 'on the first page of one page' do
|
41
|
+
subject { Blacklight::Solr::FacetPaginator.new(six_facet_values, offset: 0, limit: limit) }
|
42
|
+
it { should be_first_page }
|
43
|
+
it { should be_last_page }
|
42
44
|
end
|
43
|
-
it 'should know a manually set sort, and produce proper sort url' do
|
44
|
-
paginator = Blacklight::Solr::FacetPaginator.new(@seven_facet_values, :offset => 100, :limit => @limit, :sort => 'index')
|
45
45
|
|
46
|
-
|
47
|
-
|
48
|
-
|
46
|
+
describe "params_for_resort_url" do
|
47
|
+
let(:sort_key) { Blacklight::Solr::FacetPaginator.request_keys[:sort] }
|
48
|
+
let(:page_key) { Blacklight::Solr::FacetPaginator.request_keys[:page] }
|
49
|
+
let(:paginator) { Blacklight::Solr::FacetPaginator.new(seven_facet_values, offset: 100, limit: limit, sort: 'index') }
|
49
50
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
it 'should return all items when limit is greater than items.length' do
|
58
|
-
paginator = Blacklight::Solr::FacetPaginator.new(@six_facet_values, :offset => 100, :limit => 6, :sort => 'index')
|
59
|
-
expect(paginator.items).to have(6).items
|
60
|
-
end
|
61
|
-
describe "for a nil :limit" do
|
62
|
-
before(:all) do
|
63
|
-
@paginator = Blacklight::Solr::FacetPaginator.new(@seven_facet_values, :offset => 100, :limit => nil, :sort => 'index')
|
64
|
-
end
|
65
|
-
it 'should return all items' do
|
66
|
-
expect(@paginator.items).to eq @seven_facet_values
|
67
|
-
end
|
68
|
-
it 'should not has_next?' do
|
69
|
-
expect(@paginator).not_to have_next
|
51
|
+
it 'should know a manually set sort, and produce proper sort url' do
|
52
|
+
expect(paginator.sort).to eq 'index'
|
53
|
+
|
54
|
+
click_params = paginator.params_for_resort_url('count', {})
|
55
|
+
|
56
|
+
expect(click_params[ sort_key ]).to eq 'count'
|
57
|
+
expect(click_params[ page_key ]).to be_nil
|
70
58
|
end
|
71
|
-
|
72
|
-
|
59
|
+
end
|
60
|
+
|
61
|
+
context "for a nil :limit" do
|
62
|
+
subject { Blacklight::Solr::FacetPaginator.new(seven_facet_values, offset: 0, limit: nil) }
|
63
|
+
it "should return all the items" do
|
64
|
+
expect(subject.items).to eq seven_facet_values
|
73
65
|
end
|
74
66
|
end
|
75
67
|
|
@@ -191,6 +191,14 @@ describe Blacklight::SolrHelper do
|
|
191
191
|
end
|
192
192
|
end
|
193
193
|
|
194
|
+
describe "for an empty facet limit param" do
|
195
|
+
it "should not add any fq to solr" do
|
196
|
+
solr_params = subject.solr_search_params(:f => {"format" => [""]})
|
197
|
+
|
198
|
+
expect(solr_params[:fq]).to be_blank
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
194
202
|
describe "with Multi Facets, No Query" do
|
195
203
|
it 'should have fq set properly' do
|
196
204
|
solr_params = subject.solr_search_params(:f => @multi_facets)
|
data/spec/spec_helper.rb
CHANGED
@@ -22,6 +22,7 @@ require 'engine_cart'
|
|
22
22
|
EngineCart.load_application!
|
23
23
|
|
24
24
|
require 'rspec/rails'
|
25
|
+
require 'rspec/its'
|
25
26
|
require 'capybara/rspec'
|
26
27
|
require 'capybara/poltergeist'
|
27
28
|
|
@@ -43,15 +44,6 @@ end
|
|
43
44
|
Dir[Pathname.new(File.expand_path("../support/**/*.rb", __FILE__))].each {|f| require f}
|
44
45
|
|
45
46
|
RSpec.configure do |config|
|
46
|
-
# == Mock Framework
|
47
|
-
#
|
48
|
-
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
|
49
|
-
#
|
50
|
-
# config.mock_with :mocha
|
51
|
-
# config.mock_with :flexmock
|
52
|
-
# config.mock_with :rr
|
53
|
-
config.mock_with :rspec
|
54
|
-
|
55
47
|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
|
56
48
|
config.fixture_path = "#{::Rails.root}/spec/fixtures"
|
57
49
|
|
@@ -61,4 +53,5 @@ RSpec.configure do |config|
|
|
61
53
|
config.use_transactional_fixtures = true
|
62
54
|
|
63
55
|
config.include Devise::TestHelpers, type: :controller
|
56
|
+
config.infer_spec_type_from_file_location!
|
64
57
|
end
|
@@ -7,8 +7,10 @@ describe "catalog/_constraints_element.html.erb" do
|
|
7
7
|
end
|
8
8
|
it "should render label and value" do
|
9
9
|
expect(rendered).to have_selector("span.appliedFilter.constraint") do |s|
|
10
|
+
expect(s).to have_css("span.constraint-value")
|
11
|
+
expect(s).to_not have_css("a.constraint-value")
|
10
12
|
expect(s).to have_selector "span.filterName", :content => "my label"
|
11
|
-
expect(s).to have_selector "span.filterValue", :content => "my value"
|
13
|
+
expect(s).to have_selector "span.filterValue", :content => "my value"
|
12
14
|
end
|
13
15
|
end
|
14
16
|
end
|
@@ -20,7 +22,7 @@ describe "catalog/_constraints_element.html.erb" do
|
|
20
22
|
it "should include remove link" do
|
21
23
|
expect(rendered).to have_selector("span.appliedFilter") do |s|
|
22
24
|
expect(s).to have_selector(".remove[href='http://remove']")
|
23
|
-
end
|
25
|
+
end
|
24
26
|
end
|
25
27
|
|
26
28
|
it "should have an accessible remove label" do
|
@@ -37,7 +39,7 @@ describe "catalog/_constraints_element.html.erb" do
|
|
37
39
|
it "should not include checkmark" do
|
38
40
|
expect(rendered).to have_selector("span.appliedFilter") do |s|
|
39
41
|
expect(s).to_not have_selector("img[src$='checkmark.gif']")
|
40
|
-
end
|
42
|
+
end
|
41
43
|
end
|
42
44
|
end
|
43
45
|
|
@@ -60,6 +62,6 @@ describe "catalog/_constraints_element.html.erb" do
|
|
60
62
|
end
|
61
63
|
|
62
64
|
end
|
63
|
-
|
65
|
+
|
64
66
|
|
65
67
|
end
|
data/template.demo.rb
CHANGED
@@ -3,13 +3,17 @@ gem "blacklight", ">= 5.3.0"
|
|
3
3
|
run "bundle install"
|
4
4
|
|
5
5
|
# run the blacklight install generator
|
6
|
-
|
6
|
+
options = ENV.fetch("BLACKLIGHT_INSTALL_OPTIONS", '--devise --marc --jettywrapper')
|
7
|
+
|
8
|
+
generate 'blacklight:install', options
|
7
9
|
|
8
10
|
# run the database migrations
|
9
11
|
rake "db:migrate"
|
10
12
|
|
11
13
|
# index some data
|
12
|
-
|
13
|
-
rake "jetty:
|
14
|
-
rake "
|
15
|
-
rake "
|
14
|
+
if options =~ /jettywrapper/
|
15
|
+
rake "jetty:clean"
|
16
|
+
rake "jetty:start"
|
17
|
+
rake "blacklight:solr:seed"
|
18
|
+
rake "jetty:stop"
|
19
|
+
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.5.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: 2014-
|
20
|
+
date: 2014-07-07 00:00:00.000000000 Z
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
23
|
name: rails
|
@@ -139,6 +139,20 @@ dependencies:
|
|
139
139
|
version: '5.0'
|
140
140
|
- !ruby/object:Gem::Dependency
|
141
141
|
name: rspec-rails
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - "~>"
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '2.99'
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - "~>"
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '2.99'
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: rspec-its
|
142
156
|
requirement: !ruby/object:Gem::Requirement
|
143
157
|
requirements:
|
144
158
|
- - ">="
|
@@ -308,6 +322,7 @@ files:
|
|
308
322
|
- app/views/catalog/_results_pagination.html.erb
|
309
323
|
- app/views/catalog/_search_form.html.erb
|
310
324
|
- app/views/catalog/_search_header.html.erb
|
325
|
+
- app/views/catalog/_search_results.html.erb
|
311
326
|
- app/views/catalog/_search_sidebar.html.erb
|
312
327
|
- app/views/catalog/_show_default.html.erb
|
313
328
|
- app/views/catalog/_show_header_default.html.erb
|