blacklight_range_limit 2.3.0 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -2
- data/.travis.yml +7 -13
- data/Gemfile +8 -34
- data/LICENSE +15 -0
- data/README.rdoc +25 -7
- data/Rakefile +3 -4
- data/VERSION +1 -1
- data/app/assets/javascripts/blacklight_range_limit.js +5 -2
- data/app/assets/javascripts/blacklight_range_limit/range_limit_distro_facets.js +144 -68
- data/app/assets/javascripts/blacklight_range_limit/range_limit_slider.js +68 -36
- data/app/assets/stylesheets/blacklight_range_limit.css.scss +1 -46
- data/app/assets/stylesheets/blacklight_range_limit/blacklight_range_limit.css +12 -2
- data/app/helpers/range_limit_helper.rb +7 -1
- data/app/views/blacklight_range_limit/_range_limit_panel.html.erb +27 -11
- data/app/views/blacklight_range_limit/_range_segments.html.erb +13 -8
- data/blacklight_range_limit.gemspec +9 -12
- data/config/jetty.yml +7 -2
- data/lib/blacklight_range_limit/controller_override.rb +4 -13
- data/lib/blacklight_range_limit/route_sets.rb +21 -4
- data/lib/blacklight_range_limit/view_helper_override.rb +27 -11
- data/lib/generators/blacklight_range_limit/assets_generator.rb +9 -2
- data/spec/features/blacklight_range_limit_spec.rb +5 -5
- data/spec/spec_helper.rb +7 -1
- data/spec/test_app_templates/Gemfile.extra +14 -1
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +4 -15
- data/spec/test_app_templates/lib/tasks/blacklight_test_app.rake +0 -6
- data/vendor/assets/javascripts/bootstrap-slider.js +388 -0
- data/vendor/assets/javascripts/flot/excanvas.min.js +1 -1
- data/vendor/assets/javascripts/flot/jquery.flot.js +1328 -790
- data/vendor/assets/javascripts/flot/jquery.flot.selection.js +76 -60
- data/vendor/assets/stylesheets/slider.css +138 -0
- metadata +74 -110
- checksums.yaml +0 -7
- data/.rspec +0 -1
- data/MIT-LICENSE +0 -20
- data/solr/sample_solr_documents.yml +0 -641
- data/vendor/assets/javascripts/jquery-ui-1.9.2.custom.js +0 -1654
@@ -1,9 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
// for Blacklight.onLoad:
|
2
|
+
//= require blacklight/core
|
5
3
|
|
6
|
-
|
4
|
+
Blacklight.onLoad(function() {
|
5
|
+
|
7
6
|
$(".range_limit .profile .range.slider_js").each(function() {
|
8
7
|
var range_element = $(this);
|
9
8
|
|
@@ -18,42 +17,75 @@ $(".range_limit .profile .range.slider_js").each(function() {
|
|
18
17
|
var form = $(range_element).closest(".range_limit").find("form.range_limit");
|
19
18
|
var begin_el = form.find("input.range_begin");
|
20
19
|
var end_el = form.find("input.range_end");
|
20
|
+
|
21
|
+
var placeholder_input = $('<input type="text" data-slider-placeholder="true" style="width:100%;">').appendTo(range_element);
|
21
22
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
23
|
+
// make sure slider is loaded
|
24
|
+
if (placeholder_input.slider !== undefined) {
|
25
|
+
placeholder_input.slider({
|
26
|
+
min: min,
|
27
|
+
max: max+1,
|
28
|
+
value: [min, max+1],
|
29
|
+
tooltip: "hide"
|
30
|
+
});
|
31
|
+
|
32
|
+
// try to make slider width/orientation match chart's
|
33
|
+
var container = range_element.closest(".range_limit");
|
34
|
+
var plot = container.find(".chart_js").data("plot");
|
35
|
+
var slider_el = container.find(".slider");
|
36
|
+
|
37
|
+
if (plot && slider_el) {
|
38
|
+
slider_el.width(plot.width());
|
39
|
+
slider_el.css("display", "block")
|
40
|
+
slider_el.css('margin-right', 'auto');
|
41
|
+
slider_el.css('margin-left', 'auto');
|
42
|
+
}
|
43
|
+
else if (slider_el) {
|
44
|
+
slider_el.css("width", "100%");
|
45
|
+
}
|
34
46
|
}
|
47
|
+
}
|
48
|
+
|
35
49
|
|
36
|
-
|
37
|
-
|
50
|
+
begin_el.val(min);
|
51
|
+
end_el.val(max);
|
38
52
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
53
|
+
begin_el.change( function() {
|
54
|
+
var val = parseInt($(this).val());
|
55
|
+
if ( isNaN(val) || val < min) {
|
56
|
+
//for weird data, set slider at min
|
57
|
+
val = min;
|
58
|
+
}
|
59
|
+
var values = placeholder_input.data("slider").getValue();
|
60
|
+
values[0] = val;
|
61
|
+
placeholder_input.slider("setValue", values);
|
62
|
+
});
|
47
63
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
64
|
+
end_el.change( function() {
|
65
|
+
var val = parseInt($(this).val());
|
66
|
+
if ( isNaN(val) || val > max ) {
|
67
|
+
//weird entry, set slider to max
|
68
|
+
val = max;
|
69
|
+
}
|
70
|
+
var values = placeholder_input.data("slider").getValue();
|
71
|
+
values[1] = val;
|
72
|
+
placeholder_input.slider("setValue", values);
|
73
|
+
});
|
74
|
+
|
75
|
+
});
|
76
|
+
|
77
|
+
// catch event for redrawing chart, to redraw slider to match width
|
78
|
+
$("body").on("plotDrawn.blacklight.rangeLimit", function(event) {
|
79
|
+
var area = $(event.target).closest(".limit_content.range_limit");
|
80
|
+
var plot = area.find(".chart_js").data("plot");
|
81
|
+
var slider_el = area.find(".slider");
|
82
|
+
|
83
|
+
if (plot && slider_el) {
|
84
|
+
slider_el.width(plot.width());
|
85
|
+
slider_el.css("display", "block")
|
86
|
+
slider_el.css('margin-right', 'auto');
|
87
|
+
slider_el.css('margin-left', 'auto');
|
88
|
+
}
|
57
89
|
});
|
58
90
|
|
59
91
|
// returns two element array min/max as numbers. If there is a limit applied,
|
@@ -2,51 +2,6 @@
|
|
2
2
|
* this one file, but get all our files -- and local app
|
3
3
|
* require does not need to change if we change file list.
|
4
4
|
*
|
5
|
+
*= require 'slider'
|
5
6
|
*= require_tree './blacklight_range_limit'
|
6
7
|
*/
|
7
|
-
|
8
|
-
.ui-slider { position: relative; text-align: left; }
|
9
|
-
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
|
10
|
-
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
|
11
|
-
|
12
|
-
.ui-slider-horizontal { height: .8em; }
|
13
|
-
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
|
14
|
-
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
|
15
|
-
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
|
16
|
-
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
|
17
|
-
|
18
|
-
.ui-slider-vertical { width: .8em; height: 100px; }
|
19
|
-
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
|
20
|
-
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
|
21
|
-
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
|
22
|
-
.ui-slider-vertical .ui-slider-range-max { top: 0; }
|
23
|
-
|
24
|
-
.ui-widget { font-family: Helvetica,Arial,sans-serif; font-size: 1.1em; }
|
25
|
-
.ui-widget .ui-widget { font-size: 1em; }
|
26
|
-
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Helvetica,Arial,sans-serif; font-size: 1em; }
|
27
|
-
.ui-widget-content { border: 1px solid #dddddd; background: #ffffff; color: #444444; }
|
28
|
-
.ui-widget-content a { color: #444444; }
|
29
|
-
.ui-widget-header { border: 1px solid #dddddd; background: #dddddd; color: #444444; font-weight: bold; }
|
30
|
-
.ui-widget-header a { color: #444444; }
|
31
|
-
|
32
|
-
/* Interaction states
|
33
|
-
----------------------------------*/
|
34
|
-
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #dddddd; background: #f6f6f6; font-weight: bold; color: #0073ea; }
|
35
|
-
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #0073ea; text-decoration: none; }
|
36
|
-
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #0073ea; background: #0073ea; font-weight: bold; color: #ffffff; }
|
37
|
-
.ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, .ui-state-hover a:visited { color: #ffffff; text-decoration: none; }
|
38
|
-
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #dddddd; background: #ffffff; font-weight: bold; color: #ff0084; }
|
39
|
-
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ff0084; text-decoration: none; }
|
40
|
-
|
41
|
-
/* Interaction Cues
|
42
|
-
----------------------------------*/
|
43
|
-
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #cccccc; background: #ffffff; color: #444444; }
|
44
|
-
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #444444; }
|
45
|
-
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #ff0084; background: #ffffff; color: #222222; }
|
46
|
-
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #222222; }
|
47
|
-
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #222222; }
|
48
|
-
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
|
49
|
-
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
|
50
|
-
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
|
51
|
-
.ui-state-disabled .ui-icon { filter:Alpha(Opacity=35); } /* For IE8 - See #6059 */
|
52
|
-
|
@@ -1,6 +1,11 @@
|
|
1
|
+
form.range_limit {
|
2
|
+
/* leave room for buttons not to collide on line wrap */
|
3
|
+
line-height: 3;
|
4
|
+
}
|
5
|
+
|
1
6
|
form.range_limit input.range_begin, form.range_limit input.range_end {
|
2
|
-
|
3
|
-
width:
|
7
|
+
display: inline-block;
|
8
|
+
width: 4.5em;
|
4
9
|
}
|
5
10
|
|
6
11
|
.limit_content .subsection {
|
@@ -10,3 +15,8 @@ form.range_limit input.range_begin, form.range_limit input.range_end {
|
|
10
15
|
.hover_legend {
|
11
16
|
padding: 0.25em;
|
12
17
|
}
|
18
|
+
|
19
|
+
.slider_js .slider-selection {
|
20
|
+
/* color from flot selection */
|
21
|
+
background: #e8cfac;
|
22
|
+
}
|
@@ -7,7 +7,7 @@ module RangeLimitHelper
|
|
7
7
|
|
8
8
|
default = params["range"][solr_field][type] if params["range"] && params["range"][solr_field] && params["range"][solr_field][type]
|
9
9
|
|
10
|
-
text_field_tag("range[#{solr_field}][#{type}]", default, :maxlength=>4, :class => "range_#{type}")
|
10
|
+
text_field_tag("range[#{solr_field}][#{type}]", default, :maxlength=>4, :class => "form-control range_#{type}")
|
11
11
|
end
|
12
12
|
|
13
13
|
# type is 'min' or 'max'
|
@@ -82,6 +82,12 @@ module RangeLimitHelper
|
|
82
82
|
my_params["range"][solr_field]["begin"] = from
|
83
83
|
my_params["range"][solr_field]["end"] = to
|
84
84
|
my_params["range"][solr_field].delete("missing")
|
85
|
+
|
86
|
+
# eliminate temporary range status params that were just
|
87
|
+
# for looking things up
|
88
|
+
my_params.delete("range_field")
|
89
|
+
my_params.delete("range_start")
|
90
|
+
my_params.delete("range_end")
|
85
91
|
|
86
92
|
return my_params
|
87
93
|
end
|
@@ -9,15 +9,24 @@
|
|
9
9
|
( (! params["range"][solr_field]["begin"].blank?) ||
|
10
10
|
(! params["range"][solr_field]["end"].blank?) ||
|
11
11
|
params["range"][solr_field]["missing"]) %>
|
12
|
-
<
|
13
|
-
<
|
14
|
-
|
12
|
+
<ul class="current list-unstyled facet-values">
|
13
|
+
<li class="selected">
|
14
|
+
<span class="facet-label">
|
15
|
+
<span class="selected"><%= range_display(solr_field) %></span>
|
16
|
+
<%= link_to remove_range_param(solr_field), :class=>"remove", :title => "remove" do %>
|
17
|
+
<span class="glyphicon glyphicon-remove"></span>
|
18
|
+
<span class="sr-only">[remove]</span>
|
19
|
+
<% end %>
|
20
|
+
</span>
|
21
|
+
<span class="selected facet-count"><%= number_with_delimiter(@response.total) %></span>
|
22
|
+
</li>
|
23
|
+
</ul>
|
15
24
|
|
16
25
|
<% end %>
|
17
26
|
|
18
27
|
<% unless params["range"] && params["range"][solr_field] && params["range"][solr_field]["missing"] %>
|
19
28
|
<%= form_tag catalog_index_path, :method => :get, :class=>"range_limit subsection range_#{solr_field} form-inline" do %>
|
20
|
-
<%=
|
29
|
+
<%= render_hash_as_hidden_fields(params_for_search) %>
|
21
30
|
|
22
31
|
<!-- we need to include a dummy search_field parameter if none exists,
|
23
32
|
to trick blacklight into displaying actual search results instead
|
@@ -26,8 +35,8 @@
|
|
26
35
|
<%= hidden_field_tag("search_field", "dummy_range") %>
|
27
36
|
<% end %>
|
28
37
|
|
29
|
-
<%= render_range_input(solr_field, :begin) %>
|
30
|
-
<%= submit_tag 'Limit', :class=>'submit btn' %>
|
38
|
+
<%= render_range_input(solr_field, :begin) %> – <%= render_range_input(solr_field, :end) %>
|
39
|
+
<%= submit_tag 'Limit', :class=>'submit btn btn-default' %>
|
31
40
|
|
32
41
|
<% end %>
|
33
42
|
<% end %>
|
@@ -40,9 +49,9 @@
|
|
40
49
|
|
41
50
|
<% if (min = range_results_endpoint(solr_field, :min)) &&
|
42
51
|
(max = range_results_endpoint(solr_field, :max)) %>
|
43
|
-
<
|
52
|
+
<p class="range subsection <%= "slider_js" unless field_config[:slider_js] == false %>">
|
44
53
|
Current results range from <span class="min"><%= range_results_endpoint(solr_field, :min) %></span> to <span class="max"><%= range_results_endpoint(solr_field, :max) %></span>
|
45
|
-
</
|
54
|
+
</p>
|
46
55
|
|
47
56
|
<% if field_config[:segments] != false %>
|
48
57
|
<div class="distribution subsection <%= 'chart_js' unless field_config[:chart_js] == false %>">
|
@@ -63,9 +72,16 @@
|
|
63
72
|
|
64
73
|
|
65
74
|
<% if (stats = stats_for_field(solr_field)) && stats["missing"] > 0 %>
|
66
|
-
<
|
67
|
-
|
68
|
-
|
75
|
+
<ul class="missing list-unstyled facet-values subsection">
|
76
|
+
<li>
|
77
|
+
<span class="facet-label">
|
78
|
+
<%= link_to BlacklightRangeLimit.labels[:missing], add_range_missing(solr_field) %>
|
79
|
+
</span>
|
80
|
+
<span class="facet-count">
|
81
|
+
<%= number_with_delimiter(stats["missing"]) %>
|
82
|
+
</span>
|
83
|
+
</li>
|
84
|
+
</ul>
|
69
85
|
<% end %>
|
70
86
|
</div>
|
71
87
|
<% end %>
|
@@ -1,14 +1,19 @@
|
|
1
1
|
<% # must pass in local variable :solr_field
|
2
2
|
%>
|
3
3
|
|
4
|
-
<ul>
|
4
|
+
<ul class="facet-values list-unstyled">
|
5
5
|
<% solr_range_queries_to_a(solr_field).each do |hash| %>
|
6
|
-
<li
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
6
|
+
<li>
|
7
|
+
<span class="facet-label">
|
8
|
+
<%= link_to(
|
9
|
+
content_tag("span", facet_display_value(solr_field, hash[:from]), :class => "from") +
|
10
|
+
" to " +
|
11
|
+
content_tag("span", facet_display_value(solr_field, hash[:to]), :class => "to"),
|
12
|
+
add_range(solr_field, hash[:from], hash[:to]).merge(:action => "index"),
|
13
|
+
:class => "facet_select"
|
14
|
+
) %>
|
15
|
+
</span>
|
16
|
+
<%= render_facet_count hash[:count], classes: ['count'] %>
|
17
|
+
</li>
|
13
18
|
<% end %>
|
14
19
|
</ul>
|
@@ -5,31 +5,28 @@ Gem::Specification.new do |s|
|
|
5
5
|
s.name = "blacklight_range_limit"
|
6
6
|
s.version = BlacklightRangeLimit::VERSION
|
7
7
|
s.platform = Gem::Platform::RUBY
|
8
|
-
s.authors = ["Jonathan Rochkind"]
|
8
|
+
s.authors = ["Jonathan Rochkind", "Chris Beer"]
|
9
9
|
s.email = ["blacklight-development@googlegroups.com"]
|
10
|
-
s.homepage = "
|
10
|
+
s.homepage = "https://github.com/projectblacklight/blacklight_range_limit"
|
11
11
|
s.summary = "Blacklight Range Limit plugin"
|
12
12
|
|
13
|
-
s.rubyforge_project = "blacklight"
|
14
|
-
|
15
13
|
s.files = `git ls-files`.split("\n")
|
16
14
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
15
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
16
|
s.require_paths = ["lib"]
|
19
17
|
|
18
|
+
s.license = "Apache 2.0"
|
19
|
+
|
20
20
|
s.add_dependency "rails", ">= 3.0", "< 5.0"
|
21
21
|
s.add_dependency "jquery-rails" # our JS needs jquery_rails
|
22
|
-
|
22
|
+
# for blacklight, we want to allow 5.0.0.preX, as well as all 5.x.y,
|
23
|
+
# but not 6. can't seem to make it do so other than this:
|
24
|
+
s.add_dependency "blacklight", ">= 5.0.0.pre4", "< 6"
|
23
25
|
|
24
|
-
s.add_development_dependency "rspec", "
|
26
|
+
s.add_development_dependency "rspec", ">= 2.0"
|
25
27
|
s.add_development_dependency "rspec-rails"
|
26
28
|
s.add_development_dependency "capybara"
|
27
29
|
s.add_development_dependency "sqlite3"
|
28
30
|
s.add_development_dependency 'launchy'
|
29
|
-
s.add_development_dependency "jettywrapper"
|
30
|
-
s.add_development_dependency 'engine_cart', '~> 2.0'
|
31
|
-
s.add_development_dependency 'devise'
|
32
|
-
s.add_development_dependency 'devise-guests'
|
33
|
-
s.add_development_dependency 'bootstrap-sass'
|
34
|
-
s.add_development_dependency 'turbolinks'
|
31
|
+
s.add_development_dependency "jettywrapper", "~> 1.5", ">= 1.5.2"
|
35
32
|
end
|
data/config/jetty.yml
CHANGED
@@ -1,4 +1,9 @@
|
|
1
|
-
|
1
|
+
development:
|
2
2
|
startup_wait: 15
|
3
|
-
jetty_port: <%= ENV['TEST_JETTY_PORT'] || 8888 %>
|
3
|
+
jetty_port: <%= ENV['TEST_JETTY_PORT'] || 8888 %>
|
4
|
+
<%= ENV['TEST_JETTY_PATH'] ? "jetty_home: " + ENV['TEST_JETTY_PATH'] : '' %>
|
5
|
+
|
6
|
+
test:
|
7
|
+
startup_wait: 15
|
8
|
+
jetty_port: <%= ENV['TEST_JETTY_PORT'] || 8888 %>
|
4
9
|
<%= ENV['TEST_JETTY_PATH'] ? "jetty_home: " + ENV['TEST_JETTY_PATH'] : '' %>
|
@@ -17,16 +17,6 @@ module BlacklightRangeLimit
|
|
17
17
|
helper BlacklightRangeLimit::ViewHelperOverride
|
18
18
|
helper RangeLimitHelper
|
19
19
|
end
|
20
|
-
|
21
|
-
before_filter do |controller|
|
22
|
-
unless BlacklightRangeLimit.omit_inject[:excanvas]
|
23
|
-
|
24
|
-
# canvas for IE. Need to inject it like this even with asset pipeline
|
25
|
-
# cause it needs IE conditional include. view_context hacky way
|
26
|
-
# to get asset url helpers.
|
27
|
-
controller.extra_head_content << ('<!--[if lt IE 9]>' + view_context.javascript_include_tag("flot/excanvas.min.js") + ' <![endif]-->').html_safe
|
28
|
-
end
|
29
|
-
end
|
30
20
|
end
|
31
21
|
|
32
22
|
# Action method of our own!
|
@@ -60,7 +50,7 @@ module BlacklightRangeLimit
|
|
60
50
|
|
61
51
|
# Method added to solr_search_params_logic to fetch
|
62
52
|
# proper things for date ranges.
|
63
|
-
def add_range_limit_params(solr_params, req_params)
|
53
|
+
def add_range_limit_params(solr_params, req_params)
|
64
54
|
ranged_facet_configs =
|
65
55
|
blacklight_config.facet_fields.select { |key, config| config.range }
|
66
56
|
# In ruby 1.8, hash.select returns an array of pairs, in ruby 1.9
|
@@ -107,8 +97,9 @@ module BlacklightRangeLimit
|
|
107
97
|
# Returns range config hash for named solr field. Returns false
|
108
98
|
# if not configured. Returns hash even if configured to 'true'
|
109
99
|
# for consistency.
|
110
|
-
def range_config(solr_field)
|
111
|
-
field = blacklight_config.facet_fields[solr_field]
|
100
|
+
def range_config(solr_field)
|
101
|
+
field = blacklight_config.facet_fields[solr_field.to_s]
|
102
|
+
|
112
103
|
return false unless field.range
|
113
104
|
|
114
105
|
config = field.range
|
@@ -1,12 +1,29 @@
|
|
1
1
|
module BlacklightRangeLimit
|
2
|
+
# This module is monkey-patch included into Blacklight::Routes, so that
|
3
|
+
# map_resource will route to catalog#range_limit, for our action
|
4
|
+
# that fetches and returns range segments -- that action is
|
5
|
+
# also monkey patched into (eg) CatalogController.
|
2
6
|
module RouteSets
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
|
10
|
+
included do |klass|
|
11
|
+
# Have to add ours BEFORE existing,
|
12
|
+
# so catalog/range_limit can take priority over
|
13
|
+
# being considered a document ID.
|
14
|
+
klass.default_route_sets = [:range_limit] + klass.default_route_sets
|
15
|
+
end
|
16
|
+
|
17
|
+
|
3
18
|
protected
|
4
|
-
|
19
|
+
|
20
|
+
|
21
|
+
# Add route for (eg) catalog/range_limit, pointing to the range_limit
|
22
|
+
# method we monkey patch into (eg) CatalogController.
|
23
|
+
def range_limit(primary_resource)
|
5
24
|
add_routes do |options|
|
6
|
-
get
|
25
|
+
get "#{primary_resource}/range_limit" => "#{primary_resource}#range_limit"
|
7
26
|
end
|
8
|
-
|
9
|
-
super
|
10
27
|
end
|
11
28
|
end
|
12
29
|
end
|
@@ -3,10 +3,17 @@
|
|
3
3
|
# display.
|
4
4
|
module BlacklightRangeLimit::ViewHelperOverride
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
|
7
|
+
|
8
|
+
def facet_partial_name(display_facet)
|
9
|
+
return "blacklight_range_limit/range_limit_panel" if range_config(display_facet.name) and should_show_limit(display_facet.name)
|
10
|
+
super
|
11
|
+
end
|
12
|
+
|
13
|
+
def has_range_limit_parameters?(params = params)
|
14
|
+
params[:range] &&
|
15
|
+
params[:range].any? do |key, v|
|
16
|
+
v.present? && v.respond_to?(:'[]') &&
|
10
17
|
(v["begin"].present? || v["end"].present? || v["missing"].present?)
|
11
18
|
end
|
12
19
|
end
|
@@ -16,13 +23,21 @@
|
|
16
23
|
super || has_range_limit_parameters?
|
17
24
|
end
|
18
25
|
|
19
|
-
def query_has_constraints?(
|
20
|
-
super
|
26
|
+
def query_has_constraints?(params = params)
|
27
|
+
super || has_range_limit_parameters?(params)
|
21
28
|
end
|
22
29
|
|
23
|
-
|
24
|
-
|
25
|
-
super
|
30
|
+
# Over-ride to recognize our custom params for range facets
|
31
|
+
def facet_field_in_params?(field_name)
|
32
|
+
return super || (
|
33
|
+
range_config(field_name) &&
|
34
|
+
params[:range] &&
|
35
|
+
params[:range][field_name] &&
|
36
|
+
( params[:range][field_name]["begin"].present? ||
|
37
|
+
params[:range][field_name]["end"].present? ||
|
38
|
+
params[:range][field_name]["missing"].present?
|
39
|
+
)
|
40
|
+
)
|
26
41
|
end
|
27
42
|
|
28
43
|
def render_constraints_filters(my_params = params)
|
@@ -30,9 +45,10 @@
|
|
30
45
|
# add a constraint for ranges?
|
31
46
|
unless my_params[:range].blank?
|
32
47
|
my_params[:range].each_pair do |solr_field, hash|
|
48
|
+
|
33
49
|
next unless hash["missing"] || (!hash["begin"].blank?) || (!hash["end"].blank?)
|
34
50
|
content << render_constraint_element(
|
35
|
-
|
51
|
+
blacklight_config.facet_fields[solr_field].label,
|
36
52
|
range_display(solr_field, my_params),
|
37
53
|
:escape_value => false,
|
38
54
|
:remove => remove_range_param(solr_field, my_params)
|
@@ -50,7 +66,7 @@
|
|
50
66
|
next unless hash["missing"] || (!hash["begin"].blank?) || (! hash["end"].blank?)
|
51
67
|
|
52
68
|
content << render_search_to_s_element(
|
53
|
-
|
69
|
+
blacklight_config.facet_fields[solr_field].label,
|
54
70
|
range_display(solr_field, my_params),
|
55
71
|
:escape_value => false
|
56
72
|
)
|