blacklight_advanced_search 6.4.1 → 8.0.0.alpha2
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 +5 -5
- data/.github/workflows/ruby.yml +125 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +4 -2
- data/.rubocop_todo.yml +6 -374
- data/Gemfile +3 -8
- data/README.md +46 -60
- data/Rakefile +2 -2
- data/VERSION +1 -1
- data/blacklight_advanced_search.gemspec +6 -7
- data/config/routes.rb +1 -1
- data/lib/blacklight_advanced_search/advanced_query_parser.rb +24 -38
- data/lib/blacklight_advanced_search/advanced_search_builder.rb +27 -24
- data/lib/blacklight_advanced_search/controller.rb +15 -16
- data/lib/blacklight_advanced_search/engine.rb +0 -1
- data/lib/blacklight_advanced_search/redirect_legacy_params_filter.rb +24 -7
- data/lib/blacklight_advanced_search.rb +0 -4
- data/lib/generators/blacklight_advanced_search/install_generator.rb +3 -37
- data/lib/parsing_nesting/grammar.rb +0 -12
- data/solr/conf/schema.xml +326 -573
- data/solr/conf/solrconfig.xml +80 -294
- data/spec/features/blacklight_advanced_search_form_spec.rb +13 -18
- data/spec/lib/advanced_search_builder_spec.rb +11 -9
- data/spec/spec_helper.rb +46 -14
- data/spec/test_app_templates/app/controllers/catalog_controller.rb +5 -7
- metadata +41 -62
- data/.travis.yml +0 -21
- data/app/assets/javascripts/blacklight_advanced_search.js +0 -5
- data/app/assets/stylesheets/blacklight_advanced_search/advanced_results.css +0 -21
- data/app/assets/stylesheets/blacklight_advanced_search/blacklight_advanced_search_styles.css.scss +0 -58
- data/app/assets/stylesheets/blacklight_advanced_search.css +0 -6
- data/app/controllers/advanced_controller.rb +0 -25
- data/app/controllers/blacklight_advanced_search/advanced_controller.rb +0 -25
- data/app/helpers/advanced_helper.rb +0 -4
- data/app/helpers/blacklight_advanced_search/advanced_helper_behavior.rb +0 -57
- data/app/views/advanced/_advanced_search_facets.html.erb +0 -16
- data/app/views/advanced/_advanced_search_facets_as_select.html.erb +0 -30
- data/app/views/advanced/_advanced_search_fields.html.erb +0 -8
- data/app/views/advanced/_advanced_search_form.html.erb +0 -43
- data/app/views/advanced/_advanced_search_help.html.erb +0 -24
- data/app/views/advanced/_advanced_search_submit_btns.html.erb +0 -12
- data/app/views/advanced/_facet_limit.html.erb +0 -15
- data/app/views/advanced/index.html.erb +0 -21
- data/app/views/blacklight_advanced_search/_facet_limit.html.erb +0 -16
- data/config/jetty.yml +0 -4
- data/config/locales/blacklight_advanced_search.en.yml +0 -12
- data/lib/blacklight_advanced_search/catalog_helper_override.rb +0 -30
- data/lib/blacklight_advanced_search/filter_parser.rb +0 -11
- data/lib/blacklight_advanced_search/parsing_nesting_parser.rb +0 -15
- data/lib/blacklight_advanced_search/render_constraints_override.rb +0 -136
- data/lib/generators/blacklight_advanced_search/assets_generator.rb +0 -53
- data/lib/generators/blacklight_advanced_search/templates/advanced_controller.rb +0 -56
- data/lib/generators/blacklight_advanced_search/templates/saved_searches_controller.rb +0 -6
- data/lib/generators/blacklight_advanced_search/templates/search_history_controller.rb +0 -6
- data/solr/sample_solr_documents.yml +0 -2692
- data/spec/helpers/advanced_helper_spec.rb +0 -13
- data/spec/lib/blacklight_advanced_search/render_constraints_override_spec.rb +0 -39
- data/spec/lib/filter_parser_spec.rb +0 -22
data/config/jetty.yml
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
en:
|
2
|
-
blacklight_advanced_search:
|
3
|
-
all: all
|
4
|
-
any: any
|
5
|
-
form:
|
6
|
-
title: More Search Options
|
7
|
-
search_context: Within search
|
8
|
-
limit_criteria_heading_html: "<strong>AND</strong> have these attributes"
|
9
|
-
query_criteria_heading_html: "Find items that match %{select_menu} of"
|
10
|
-
sort_label: "Sort results by"
|
11
|
-
start_over: "Start over"
|
12
|
-
search_btn: 'Search'
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module BlacklightAdvancedSearch::CatalogHelperOverride
|
2
|
-
# Special display for facet limits that include adv search inclusive
|
3
|
-
# or limits.
|
4
|
-
def facet_partial_name(display_facet = nil)
|
5
|
-
return "blacklight_advanced_search/facet_limit" if advanced_query && advanced_query.filters.keys.include?(display_facet.name)
|
6
|
-
super
|
7
|
-
end
|
8
|
-
|
9
|
-
def remove_advanced_facet_param(field, value, my_params = params)
|
10
|
-
my_params = Blacklight::SearchState.new(my_params, blacklight_config).to_h
|
11
|
-
if (my_params[:f_inclusive] &&
|
12
|
-
my_params[:f_inclusive][field] &&
|
13
|
-
my_params[:f_inclusive][field].include?(value))
|
14
|
-
|
15
|
-
my_params[:f_inclusive] = my_params[:f_inclusive].dup
|
16
|
-
my_params[:f_inclusive][field] = my_params[:f_inclusive][field].dup
|
17
|
-
my_params[:f_inclusive][field].delete(value)
|
18
|
-
|
19
|
-
my_params[:f_inclusive].delete(field) if my_params[:f_inclusive][field].empty?
|
20
|
-
|
21
|
-
my_params.delete(:f_inclusive) if my_params[:f_inclusive].empty?
|
22
|
-
end
|
23
|
-
|
24
|
-
my_params.delete_if do |key, _value|
|
25
|
-
[:page, :id, :counter, :commit].include?(key)
|
26
|
-
end
|
27
|
-
|
28
|
-
my_params
|
29
|
-
end
|
30
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
module BlacklightAdvancedSearch::FilterParser
|
2
|
-
# Returns an array of solr :fq params. taking advanced search inclusive
|
3
|
-
# facet value lists out of params.
|
4
|
-
def generate_solr_fq
|
5
|
-
filters.map do |solr_field, value_list|
|
6
|
-
"#{solr_field}:(" +
|
7
|
-
Array(value_list).collect { |v| '"' + v.gsub('"', '\"') + '"' }.join(" OR ") +
|
8
|
-
")"
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'parsing_nesting/tree'
|
2
|
-
module BlacklightAdvancedSearch::ParsingNestingParser
|
3
|
-
def process_query(_params, config)
|
4
|
-
queries = keyword_queries.map do |field, query|
|
5
|
-
ParsingNesting::Tree.parse(query, config.advanced_search[:query_parser]).to_query(local_param_hash(field, config))
|
6
|
-
end
|
7
|
-
queries.join(" #{keyword_op} ")
|
8
|
-
end
|
9
|
-
|
10
|
-
def local_param_hash(key, config)
|
11
|
-
field_def = config.search_fields[key]
|
12
|
-
|
13
|
-
(field_def[:solr_adv_parameters] || field_def[:solr_parameters] || {}).merge(field_def[:solr_local_parameters] || {})
|
14
|
-
end
|
15
|
-
end
|
@@ -1,136 +0,0 @@
|
|
1
|
-
# Meant to be applied on top of Blacklight view helpers, to over-ride
|
2
|
-
# certain methods from RenderConstraintsHelper (newish in BL),
|
3
|
-
# to effect constraints rendering and search history rendering,
|
4
|
-
module BlacklightAdvancedSearch::RenderConstraintsOverride
|
5
|
-
def query_has_constraints?(localized_params = params)
|
6
|
-
if is_advanced_search? localized_params
|
7
|
-
true
|
8
|
-
else
|
9
|
-
!(localized_params[:q].blank? && localized_params[:f].blank? && localized_params[:f_inclusive].blank?)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
# Over-ride of Blacklight method, provide advanced constraints if needed,
|
14
|
-
# otherwise call super.
|
15
|
-
def render_constraints_query(my_params = params)
|
16
|
-
if (advanced_query.nil? || advanced_query.keyword_queries.empty?)
|
17
|
-
return super(my_params)
|
18
|
-
else
|
19
|
-
content = []
|
20
|
-
advanced_query.keyword_queries.each_pair do |field, query|
|
21
|
-
label = search_field_def_for_key(field)[:label]
|
22
|
-
content << render_constraint_element(
|
23
|
-
label, query,
|
24
|
-
:remove =>
|
25
|
-
search_action_path(remove_advanced_keyword_query(field, my_params).except(:controller, :action))
|
26
|
-
)
|
27
|
-
end
|
28
|
-
if (advanced_query.keyword_op == "OR" &&
|
29
|
-
advanced_query.keyword_queries.length > 1)
|
30
|
-
content.unshift content_tag(:span, "Any of:", class: 'operator')
|
31
|
-
content_tag :span, class: "inclusive_or appliedFilter well" do
|
32
|
-
safe_join(content.flatten, "\n")
|
33
|
-
end
|
34
|
-
else
|
35
|
-
safe_join(content.flatten, "\n")
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
# Over-ride of Blacklight method, provide advanced constraints if needed,
|
41
|
-
# otherwise call super.
|
42
|
-
def render_constraints_filters(my_params = params)
|
43
|
-
content = super(my_params)
|
44
|
-
|
45
|
-
if advanced_query
|
46
|
-
advanced_query.filters.each_pair do |field, value_list|
|
47
|
-
label = facet_field_label(field)
|
48
|
-
content << render_constraint_element(label,
|
49
|
-
safe_join(Array(value_list), " <strong class='text-muted constraint-connector'>OR</strong> ".html_safe),
|
50
|
-
:remove => search_action_path(remove_advanced_filter_group(field, my_params).except(:controller, :action))
|
51
|
-
)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
content
|
56
|
-
end
|
57
|
-
|
58
|
-
# override of BL method, so our inclusive facet selections
|
59
|
-
# are still recgonized for eg highlighting facet with selected
|
60
|
-
# values.
|
61
|
-
def facet_field_in_params?(field)
|
62
|
-
return true if super
|
63
|
-
|
64
|
-
# otherwise use our own logic.
|
65
|
-
query = BlacklightAdvancedSearch::QueryParser.new(params, self.blacklight_config)
|
66
|
-
return true if query.filters.keys.include?(field)
|
67
|
-
|
68
|
-
false
|
69
|
-
end
|
70
|
-
|
71
|
-
def render_search_to_s_filters(my_params)
|
72
|
-
content = super(my_params)
|
73
|
-
|
74
|
-
advanced_query = BlacklightAdvancedSearch::QueryParser.new(my_params, blacklight_config)
|
75
|
-
|
76
|
-
unless advanced_query.filters.empty?
|
77
|
-
advanced_query.filters.each_pair do |field, values|
|
78
|
-
# old-style, may still be in history
|
79
|
-
values = values.keys if values.is_a? Hash
|
80
|
-
|
81
|
-
label = facet_field_label(field)
|
82
|
-
|
83
|
-
content << render_search_to_s_element(
|
84
|
-
label,
|
85
|
-
values.join(" OR ")
|
86
|
-
)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
content
|
90
|
-
end
|
91
|
-
|
92
|
-
def render_search_to_s_q(my_params)
|
93
|
-
content = super(my_params)
|
94
|
-
|
95
|
-
advanced_query = BlacklightAdvancedSearch::QueryParser.new(my_params, blacklight_config)
|
96
|
-
|
97
|
-
if (advanced_query.keyword_queries.length > 1 &&
|
98
|
-
advanced_query.keyword_op == "OR")
|
99
|
-
# Need to do something to make the inclusive-or search clear
|
100
|
-
|
101
|
-
display_as = advanced_query.keyword_queries.collect do |field, query|
|
102
|
-
h(search_field_def_for_key(field)[:label] + ": " + query)
|
103
|
-
end.join(" ; ")
|
104
|
-
|
105
|
-
content << render_search_to_s_element("Any of",
|
106
|
-
display_as,
|
107
|
-
:escape_value => false
|
108
|
-
)
|
109
|
-
elsif !advanced_query.keyword_queries.empty?
|
110
|
-
advanced_query.keyword_queries.each_pair do |field, query|
|
111
|
-
label = search_field_def_for_key(field)[:label]
|
112
|
-
|
113
|
-
content << render_search_to_s_element(label, query)
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
content
|
118
|
-
end
|
119
|
-
|
120
|
-
def remove_advanced_keyword_query(field, my_params = params)
|
121
|
-
my_params = Blacklight::SearchState.new(my_params, blacklight_config).to_h
|
122
|
-
my_params.delete(field)
|
123
|
-
my_params
|
124
|
-
end
|
125
|
-
|
126
|
-
def remove_advanced_filter_group(field, my_params = params)
|
127
|
-
if (my_params[:f_inclusive])
|
128
|
-
my_params = Blacklight::SearchState.new(my_params, blacklight_config).to_h
|
129
|
-
my_params[:f_inclusive] = my_params[:f_inclusive].dup
|
130
|
-
my_params[:f_inclusive].delete(field)
|
131
|
-
|
132
|
-
my_params.delete :f_inclusive if my_params[:f_inclusive].empty?
|
133
|
-
end
|
134
|
-
my_params
|
135
|
-
end
|
136
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
# Copy BlacklightAdvancedSearch assets to public folder in current app.
|
2
|
-
# If you want to do this on application startup, you can
|
3
|
-
# add this next line to your one of your environment files --
|
4
|
-
# generally you'd only want to do this in 'development', and can
|
5
|
-
# add it to environments/development.rb:
|
6
|
-
# require File.join(BlacklightAdvancedSearch.root, "lib", "generators", "blacklight", "assets_generator.rb")
|
7
|
-
# BlacklightAdvancedSearch::AssetsGenerator.start(["--force", "--quiet"])
|
8
|
-
|
9
|
-
# Need the requires here so we can call the generator from environment.rb
|
10
|
-
# as suggested above.
|
11
|
-
require 'rails/generators'
|
12
|
-
require 'rails/generators/base'
|
13
|
-
module BlacklightAdvancedSearch
|
14
|
-
class AssetsGenerator < Rails::Generators::Base
|
15
|
-
source_root File.join(BlacklightAdvancedSearch::Engine.root, 'app', 'assets')
|
16
|
-
|
17
|
-
def css_asset
|
18
|
-
application_css_location = Dir["app/assets/stylesheets/application{.css,.scss,.css.scss}"].first
|
19
|
-
|
20
|
-
unless application_css_location
|
21
|
-
say_status "skipped", "Can not find an application.css, did not insert our require", :red
|
22
|
-
return
|
23
|
-
end
|
24
|
-
|
25
|
-
original_css = File.binread(application_css_location)
|
26
|
-
if original_css.include?("require 'blacklight_advanced_search'")
|
27
|
-
say_status("skipped", "insert into app/assets/stylesheets/application.css", :yellow)
|
28
|
-
else
|
29
|
-
insert_into_file application_css_location, :before => "*/" do
|
30
|
-
"\n *= require 'blacklight_advanced_search'\n\n"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def js_asset
|
36
|
-
application_js_location = Dir["app/assets/javascripts/application{.js,.coffee,.js.coffee}"].first
|
37
|
-
|
38
|
-
unless application_js_location
|
39
|
-
say_status "skipped", "Can not find an application.js, did not insert our require", :red
|
40
|
-
return
|
41
|
-
end
|
42
|
-
|
43
|
-
original_js = File.binread(application_js_location)
|
44
|
-
if original_js.include?("require 'blacklight_advanced_search'")
|
45
|
-
say_status("skipped", "insert into app/assets/javascripts/application.js", :yellow)
|
46
|
-
else
|
47
|
-
insert_into_file application_js_location, :after => %r{//= require ['"]?jquery['"]?$} do
|
48
|
-
"\n//= require 'blacklight_advanced_search'\n\n"
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
class AdvancedController < BlacklightAdvancedSearch::AdvancedController
|
2
|
-
blacklight_config.configure do |config|
|
3
|
-
# name of Solr request handler, leave unset to use the same one your Blacklight
|
4
|
-
# is ordinarily using (recommended if possible)
|
5
|
-
# config.advanced_search.qt = 'advanced'
|
6
|
-
|
7
|
-
##
|
8
|
-
# The advanced search form displays facets as a limit option.
|
9
|
-
# By default it will use whatever facets, if any, are returned
|
10
|
-
# by the Solr request handler in use. However, you can use
|
11
|
-
# this config option to have it request other facet params than
|
12
|
-
# default in the Solr request handler, in desired.
|
13
|
-
config.advanced_search.form_solr_parameters = {}
|
14
|
-
|
15
|
-
# name of key in Blacklight URL, no reason to change usually.
|
16
|
-
config.advanced_search.url_key = 'advanced'
|
17
|
-
|
18
|
-
# We are going to completely override the inherited search fields
|
19
|
-
config.search_fields.clear
|
20
|
-
|
21
|
-
config.add_search_field 'author' do |field|
|
22
|
-
field.solr_local_parameters = {
|
23
|
-
:pf => "$pf_author",
|
24
|
-
:qf => "$qf_author"
|
25
|
-
}
|
26
|
-
end
|
27
|
-
|
28
|
-
config.add_search_field 'title' do |field|
|
29
|
-
field.solr_local_parameters = {
|
30
|
-
:pf => "$pf_title",
|
31
|
-
:qf => "$qf_title"
|
32
|
-
}
|
33
|
-
end
|
34
|
-
|
35
|
-
config.add_search_field 'subject' do |field|
|
36
|
-
field.solr_local_parameters = {
|
37
|
-
:pf => "$pf_subject",
|
38
|
-
:qf => "$qf_subject"
|
39
|
-
}
|
40
|
-
end
|
41
|
-
|
42
|
-
config.add_search_field 'keyword' do |field|
|
43
|
-
field.solr_local_parameters = {
|
44
|
-
:pf => "$pf_keyword",
|
45
|
-
:qf => "$qf_keyword"
|
46
|
-
}
|
47
|
-
end
|
48
|
-
|
49
|
-
config.add_search_field 'number' do |field|
|
50
|
-
field.solr_local_parameters = {
|
51
|
-
:pf => "$pf_number",
|
52
|
-
:qf => "$qf_number"
|
53
|
-
}
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|