blacklight 3.1.2 → 3.2.0pre1

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.
Files changed (121) hide show
  1. data/.gitignore +5 -2
  2. data/README.md +7 -2
  3. data/VERSION +1 -1
  4. data/app/assets/images/favicon.ico +0 -0
  5. data/app/assets/javascripts/blacklight/blacklight.js +23 -1
  6. data/app/assets/stylesheets/blacklight/_catalog.css.scss +369 -0
  7. data/app/assets/stylesheets/blacklight/_facets.css.scss +117 -0
  8. data/app/assets/stylesheets/blacklight/_folder.css.scss +38 -0
  9. data/app/assets/stylesheets/blacklight/_formatting.css.scss +164 -0
  10. data/app/assets/stylesheets/blacklight/_header.css.scss +36 -0
  11. data/app/assets/stylesheets/blacklight/_layout.css.scss +79 -0
  12. data/app/assets/stylesheets/blacklight/_print.css.scss +54 -0
  13. data/app/assets/stylesheets/blacklight/_search_history.css.scss +44 -0
  14. data/app/assets/stylesheets/blacklight/_susy_framework.css.scss +228 -0
  15. data/app/assets/stylesheets/blacklight/blacklight.css.scss +27 -0
  16. data/app/assets/stylesheets/blacklight/blacklight_defaults.css.scss +48 -0
  17. data/app/controllers/bookmarks_controller.rb +2 -1
  18. data/app/controllers/folder_controller.rb +4 -0
  19. data/app/controllers/saved_searches_controller.rb +4 -0
  20. data/app/controllers/search_history_controller.rb +4 -0
  21. data/app/helpers/blacklight/blacklight_helper_behavior.rb +64 -104
  22. data/app/helpers/blacklight/catalog_helper_behavior.rb +4 -4
  23. data/app/helpers/blacklight/facets_helper_behavior.rb +52 -5
  24. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +14 -59
  25. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +56 -0
  26. data/app/helpers/search_history_constraints_helper.rb +3 -0
  27. data/app/models/record_mailer.rb +1 -2
  28. data/app/views/_flash_msg.html.erb +4 -5
  29. data/app/views/_user_util_links.html.erb +3 -1
  30. data/app/views/bookmarks/index.html.erb +2 -2
  31. data/app/views/catalog/_bookmark_control.html.erb +6 -6
  32. data/app/views/catalog/_facet_layout.html.erb +4 -0
  33. data/app/views/catalog/_facet_limit.html.erb +20 -33
  34. data/app/views/catalog/_facets.html.erb +1 -5
  35. data/app/views/catalog/_folder_control.html.erb +5 -5
  36. data/app/views/catalog/_index_default.html.erb +1 -1
  37. data/app/views/catalog/_search_form.html.erb +4 -3
  38. data/app/views/catalog/_show_default.html.erb +1 -1
  39. data/app/views/catalog/_show_tools.html.erb +6 -6
  40. data/app/views/catalog/_sort_and_per_page.html.erb +1 -1
  41. data/app/views/catalog/index.atom.builder +2 -2
  42. data/app/views/catalog/index.rss.builder +1 -1
  43. data/app/views/catalog/opensearch.xml.builder +10 -0
  44. data/app/views/catalog/show.html.erb +1 -1
  45. data/app/views/folder/_tools.html.erb +4 -4
  46. data/app/views/layouts/blacklight.html.erb +25 -37
  47. data/app/views/record_mailer/email_record.text.erb +1 -1
  48. data/app/views/record_mailer/sms_record.text.erb +2 -2
  49. data/app/views/search_history/index.html.erb +1 -1
  50. data/blacklight.gemspec +11 -9
  51. data/lib/{generators/blacklight/templates/SolrMarc.jar → SolrMarc.jar} +0 -0
  52. data/lib/blacklight.rb +5 -3
  53. data/lib/blacklight/catalog.rb +3 -4
  54. data/lib/blacklight/configurable.rb +54 -39
  55. data/lib/blacklight/configuration.rb +126 -0
  56. data/lib/blacklight/configuration/fields.rb +142 -0
  57. data/lib/blacklight/configuration/search_field.rb +12 -0
  58. data/lib/blacklight/configuration/solr_field.rb +12 -0
  59. data/lib/blacklight/configuration/sort_field.rb +17 -0
  60. data/lib/blacklight/controller.rb +16 -14
  61. data/lib/blacklight/engine.rb +1 -1
  62. data/lib/blacklight/global_configurable.rb +46 -0
  63. data/lib/blacklight/search_fields.rb +21 -54
  64. data/lib/blacklight/solr/document.rb +13 -3
  65. data/lib/blacklight/solr_helper.rb +88 -52
  66. data/lib/blacklight/utils.rb +18 -0
  67. data/lib/generators/blacklight/assets_generator.rb +14 -20
  68. data/lib/generators/blacklight/blacklight_generator.rb +14 -6
  69. data/lib/generators/blacklight/jetty_generator.rb +1 -1
  70. data/lib/generators/blacklight/templates/assets/standard.css.scss +51 -0
  71. data/lib/generators/blacklight/templates/catalog_controller.rb +148 -0
  72. data/lib/generators/blacklight/templates/config/blacklight_config.rb +2 -239
  73. data/lib/generators/blacklight/templates/config/sass.rb +5 -0
  74. data/lib/generators/blacklight/templates/solr_conf/schema.xml +514 -164
  75. data/lib/generators/blacklight/templates/solr_conf/solrconfig.xml +1591 -323
  76. data/lib/generators/blacklight/templates/solr_document.rb +2 -0
  77. data/lib/railties/all_tests.rake +36 -3
  78. data/lib/railties/blacklight_cucumber.rake +6 -4
  79. data/lib/railties/blacklight_rspec.rake +5 -4
  80. data/test_support/bin/run-tests.sh +2 -13
  81. data/test_support/bin/test.sh +30 -23
  82. data/test_support/features/did_you_mean.feature +14 -13
  83. data/test_support/features/step_definitions/saved_searches_steps.rb +1 -1
  84. data/test_support/features/step_definitions/search_steps.rb +4 -4
  85. data/test_support/spec/controllers/application_controller_spec.rb +3 -13
  86. data/test_support/spec/controllers/catalog_controller_spec.rb +102 -24
  87. data/test_support/spec/controllers/folder_controller_spec.rb +7 -1
  88. data/test_support/spec/helpers/blacklight_helper_spec.rb +45 -34
  89. data/test_support/spec/helpers/facets_helper_spec.rb +68 -0
  90. data/test_support/spec/helpers/html_head_helper_spec.rb +37 -0
  91. data/test_support/spec/helpers/{render_constraints_helper_spec.rb → search_history_constraints_helper_spec.rb} +26 -7
  92. data/test_support/spec/lib/blacklight_configurable_spec.rb +92 -0
  93. data/test_support/spec/lib/blacklight_configuration_spec.rb +295 -0
  94. data/test_support/spec/lib/{configurable_spec.rb → global_configurable_spec.rb} +2 -2
  95. data/test_support/spec/lib/search_fields_spec.rb +26 -29
  96. data/test_support/spec/{helpers → lib}/solr_helper_spec.rb +268 -287
  97. data/test_support/spec/lib/tasks/solr_marc_task_spec.rb +1 -1
  98. data/test_support/spec/lib/utils_spec.rb +58 -0
  99. data/test_support/spec/models/solr_docment_spec.rb +4 -8
  100. data/test_support/spec/views/catalog/_facets.html.erb_spec.rb +27 -170
  101. data/test_support/spec/views/catalog/_index_default.erb_spec.rb +38 -20
  102. data/test_support/spec/views/catalog/_show_default.erb_spec.rb +38 -19
  103. data/test_support/spec/views/catalog/index.atom.builder_spec.rb +19 -1
  104. metadata +148 -145
  105. data/app/assets/stylesheets/blacklight/blacklight.css +0 -493
  106. data/app/assets/stylesheets/yui.css +0 -31
  107. data/app/views/catalog/opensearch.xml.erb +0 -11
  108. data/doc/Atom-Responses.md +0 -90
  109. data/doc/CUSTOMIZING.md +0 -121
  110. data/doc/Extending-blacklight-with-the-document-extension-framework.md +0 -1
  111. data/doc/Extending-or-Modifying-Blacklight-Search-Behavior.md +0 -131
  112. data/doc/Features.md +0 -147
  113. data/doc/Integration-with-Rails-Footnotes.md +0 -20
  114. data/doc/Pagination.md +0 -38
  115. data/doc/Quickstart.md +0 -97
  116. data/doc/Upgrading-Guide.md +0 -98
  117. data/doc/User-Authentication.md +0 -54
  118. data/doc/Using-a-custom-solr-uniquekey-field.md +0 -36
  119. data/lib/blacklight/comma_link_renderer.rb +0 -28
  120. data/lib/railties/jetty_solr_server.rb +0 -108
  121. data/test_support/spec/views/catalog/show.html.erb_spec.rb +0 -101
@@ -46,12 +46,10 @@
46
46
 
47
47
  module Blacklight::SolrHelper
48
48
  extend ActiveSupport::Concern
49
-
50
- MaxPerPage = 100
49
+ include Blacklight::SearchFields
51
50
 
52
51
  included do
53
52
  if self.respond_to?(:helper_method)
54
- helper_method(:facet_limit_hash)
55
53
  helper_method(:facet_limit_for)
56
54
  end
57
55
 
@@ -68,7 +66,7 @@ module Blacklight::SolrHelper
68
66
  # CatalogController.include ModuleDefiningNewMethod
69
67
  # CatalogController.solr_search_params_logic += [:new_method]
70
68
  # CatalogController.solr_search_params_logic.delete(:we_dont_want)
71
- self.solr_search_params_logic = [:default_solr_parameters , :add_query_to_solr, :add_facet_fq_to_solr, :add_facetting_to_solr, :add_sorting_paging_to_solr ]
69
+ self.solr_search_params_logic = [:default_solr_parameters , :add_query_to_solr, :add_facet_fq_to_solr, :add_facetting_to_solr, :add_paging_to_solr, :add_sorting_to_solr ]
72
70
  end
73
71
 
74
72
  def force_to_utf8(value)
@@ -132,32 +130,63 @@ module Blacklight::SolrHelper
132
130
  # Start with general defaults from BL config. Need to use custom
133
131
  # merge to dup values, to avoid later mutating the original by mistake.
134
132
  def default_solr_parameters(solr_parameters, user_params)
135
- if Blacklight.config[:default_solr_params]
136
- Blacklight.config[:default_solr_params].each_pair do |key, value|
137
- solr_parameters[key] = value.dup rescue value
138
- end
133
+ blacklight_config.default_solr_params.each do |key, value|
134
+ solr_parameters[key] = value.dup rescue value
139
135
  end
140
136
  end
141
137
 
142
138
  ###
143
- # copy paging and sorting params from BL app over to solr, with
144
- # fairly little transformation.
145
- def add_sorting_paging_to_solr(solr_parameters, user_params)
146
- # Omit empty strings and nil values.
147
- # Apparently RSolr takes :per_page and converts it to Solr :rows,
148
- # so we let it.
149
- [:page, :per_page, :sort].each do |key|
150
- solr_parameters[key] = user_params[key] unless user_params[key].blank?
139
+ # copy paging params from BL app over to solr, changing
140
+ # app level per_page and page to Solr rows and start.
141
+ def add_paging_to_solr(solr_params, user_params)
142
+ # Deprecated behavior was to pass :per_page to RSolr, and we
143
+ # generated blacklight_config.default_solr_params with that
144
+ # value. Move it over to rows.
145
+ if solr_params.has_key?(:per_page)
146
+ $stderr.puts "DEPRECATION WARNING: Blacklight::SolrHelper#solr_search_params: magic :per_page key deprecated, use :rows instead. (Check default_solr_params in blacklight config?)"
147
+ per_page = solr_params.delete(:per_page)
148
+ solr_params[:rows] ||= per_page
151
149
  end
152
150
 
153
- if solr_parameters[:sort].blank?
154
- default_sort_field = Blacklight.config[:sort_fields].first || [nil, nil]
155
- solr_parameters[:sort] = default_sort_field.last unless default_sort_field.last.blank?
156
- end
151
+ # Now any over-rides from current URL?
152
+ solr_params[:rows] = user_params[:per_page] unless user_params[:per_page].blank?
157
153
 
154
+ # Do we need to translate :page to Solr :start?
155
+ unless user_params[:page].blank?
156
+ # already set solr_params["rows"] might not be the one we just set,
157
+ # could have been from app defaults too. But we need one.
158
+ # raising is consistent with prior RSolr magic keys behavior.
159
+ # We could change this to default to 10, or to raise on startup
160
+ # from config instead of at runtime.
161
+ if solr_params[:rows].blank?
162
+ raise Exception.new("To use pagination when no :per_page is supplied in the URL, :rows must be configured in blacklight_config default_solr_params")
163
+ end
164
+
165
+ solr_params[:start] = solr_params[:rows].to_i * (user_params[:page].to_i - 1)
166
+
167
+ # Solr throws error for negative start. Existing specs say
168
+ # we say start at 1 in this case.
169
+ solr_params[:start] = 0 if solr_params[:start].to_i < 0
170
+ end
171
+
158
172
  # limit to MaxPerPage (100). Tests want this to be a string not an integer,
159
173
  # not sure why.
160
- solr_parameters[:per_page] = solr_parameters[:per_page].to_i > self.max_per_page ? self.max_per_page.to_s : solr_parameters[:per_page]
174
+ solr_params[:rows] = solr_params[:rows].to_i > blacklight_config.max_per_page ? blacklight_config.max_per_page : solr_params[:rows]
175
+ end
176
+
177
+ ###
178
+ # copy sorting params from BL app over to solr
179
+ def add_sorting_to_solr(solr_parameters, user_params)
180
+ if user_params[:sort].blank? and sort_field = blacklight_config.default_sort_field
181
+ # no sort param provided, use default
182
+ solr_parameters[:sort] = sort_field.sort unless sort_field.sort.blank?
183
+ elsif sort_field = blacklight_config.sort_fields[user_params[:sort]]
184
+ # check for sort field key
185
+ solr_parameters[:sort] = sort_field.sort unless sort_field.sort.blank?
186
+ else
187
+ # just pass the key through
188
+ solr_parameters[:sort] = user_params[:sort]
189
+ end
161
190
  end
162
191
 
163
192
  ##
@@ -175,10 +204,10 @@ module Blacklight::SolrHelper
175
204
  # rspec'd.
176
205
  solr_parameters[:qt] = user_parameters[:qt] if user_parameters[:qt]
177
206
 
178
- search_field_def = Blacklight.search_field_def_for_key(user_parameters[:search_field])
207
+ search_field_def = search_field_def_for_key(user_parameters[:search_field])
179
208
  if (search_field_def)
180
- solr_parameters[:qt] = search_field_def[:qt] if search_field_def[:qt]
181
- solr_parameters.merge!( search_field_def[:solr_parameters]) if search_field_def[:solr_parameters]
209
+ solr_parameters[:qt] = search_field_def.qt
210
+ solr_parameters.merge!( search_field_def.solr_parameters) if search_field_def.solr_parameters
182
211
  end
183
212
 
184
213
  ##
@@ -186,7 +215,7 @@ module Blacklight::SolrHelper
186
215
  # solr LocalParams in config, using solr LocalParams syntax.
187
216
  # http://wiki.apache.org/solr/LocalParams
188
217
  ##
189
- if (search_field_def && hash = search_field_def[:solr_local_parameters])
218
+ if (search_field_def && hash = search_field_def.solr_local_parameters)
190
219
  local_params = hash.collect do |key, val|
191
220
  key.to_s + "=" + solr_param_quote(val, :quote => "'")
192
221
  end.join(" ")
@@ -222,11 +251,26 @@ module Blacklight::SolrHelper
222
251
  value_list ||= []
223
252
  value_list = [value_list] unless value_list.respond_to? :each
224
253
  value_list.each do |value|
225
- solr_parameters[:fq] << "{!raw f=#{facet_field}}#{value}"
254
+ solr_parameters[:fq] << facet_value_to_fq_string(facet_field, value)
226
255
  end
227
256
  end
228
257
  end
229
258
  end
259
+
260
+ ##
261
+ # Convert a facet/value pair into a solr fq parameter
262
+ def facet_value_to_fq_string(facet_field, value)
263
+ case
264
+ when (value.is_a?(Integer) or (value.to_i.to_s == value if value.respond_to? :to_i))
265
+ "#{facet_field}:#{value}"
266
+ when (value.is_a?(Float) or (value.to_f.to_s == value if value.respond_to? :to_f))
267
+ "#{facet_field}:#{value}"
268
+ when value.is_a?(Range)
269
+ "#{facet_field}:[#{value.first} TO #{value.last}]"
270
+ else
271
+ "{!raw f=#{facet_field}}#{value}"
272
+ end
273
+ end
230
274
 
231
275
  ##
232
276
  # Add appropriate Solr facetting directives in, including
@@ -247,8 +291,7 @@ module Blacklight::SolrHelper
247
291
  # Support facet paging and 'more'
248
292
  # links, by sending a facet.limit one more than what we
249
293
  # want to page at, according to configured facet limits.
250
- facet_limit_hash.each_key do |field_name|
251
- next if field_name.nil? # skip the 'default' key
294
+ blacklight_config.facet_fields.each do |field_name, facet|
252
295
  next unless (limit = facet_limit_for(field_name))
253
296
 
254
297
  solr_parameters[:"f.#{field_name}.facet.limit"] = (limit + 1)
@@ -268,7 +311,7 @@ module Blacklight::SolrHelper
268
311
  # In later versions of Rails, the #benchmark method can do timing
269
312
  # better for us.
270
313
  bench_start = Time.now
271
-
314
+
272
315
  solr_response = find(self.solr_search_params(user_params).merge(extra_controller_params))
273
316
  document_list = solr_response.docs.collect {|doc| SolrDocument.new(doc, solr_response)}
274
317
  Rails.logger.debug("Solr fetch: #{self.class}#get_search_results (#{'%.1f' % ((Time.now.to_f - bench_start.to_f)*1000)}ms)")
@@ -301,10 +344,17 @@ module Blacklight::SolrHelper
301
344
  def get_solr_response_for_field_values(field, values, extra_solr_params = {})
302
345
  values ||= []
303
346
  values = [values] unless values.respond_to? :each
304
- value_str = "(\"" + values.to_a.join("\" OR \"") + "\")"
347
+
348
+ q = nil
349
+ if values.empty?
350
+ q = "NOT *:*"
351
+ else
352
+ q = "#{field}:(#{ values.to_a.map { |x| solr_param_quote(x)}.join(" OR ")})"
353
+ end
354
+
305
355
  solr_params = {
306
356
  :defType => "lucene", # need boolean for OR
307
- :q => "#{field}:#{value_str}",
357
+ :q => q,
308
358
  # not sure why fl * is neccesary, why isn't default solr_search_params
309
359
  # sufficient, like it is for any other search results solr request?
310
360
  # But tests fail without this. I think because some functionality requires
@@ -391,10 +441,8 @@ module Blacklight::SolrHelper
391
441
  # the Blacklight app-level request params that define the search.
392
442
  def get_single_doc_via_search(index, request_params)
393
443
  solr_params = solr_search_params(request_params)
394
- # solr_params[:start] = index - 1 # start at 0 to get 1st doc, 1 to get 2nd.
395
- # FIXME: we must set page because of a bug posted here: https://github.com/mwmitchell/rsolr-ext/issues/16
396
- solr_params[:page] = index # start at 1 to get 1st 1-doc page with RSolr::Ext :page
397
- solr_params[:per_page] = 1
444
+
445
+ solr_params[:start] = (index - 1) # start at 0 to get 1st doc, 1 to get 2nd.
398
446
  solr_params[:rows] = 1
399
447
  solr_params[:fl] = '*'
400
448
  solr_response = find(solr_params)
@@ -402,13 +450,13 @@ module Blacklight::SolrHelper
402
450
  end
403
451
 
404
452
  # returns a solr params hash
405
- # if field is nil, the value is fetched from Blacklight.config[:index][:show_link]
453
+ # if field is nil, the value is fetched from blacklight_config[:index][:show_link]
406
454
  # the :fl (solr param) is set to the "field" value.
407
455
  # per_page is set to 10
408
456
  def solr_opensearch_params(field=nil)
409
457
  solr_params = solr_search_params
410
458
  solr_params[:per_page] = 10
411
- solr_params[:fl] = Blacklight.config[:index][:show_link]
459
+ solr_params[:fl] = blacklight_config.index.show_link
412
460
  solr_params
413
461
  end
414
462
 
@@ -434,10 +482,10 @@ module Blacklight::SolrHelper
434
482
  # available), and used in display (with @response available) to create
435
483
  # a facet paginator with the right limit.
436
484
  def facet_limit_for(facet_field)
437
- limits_hash = facet_limit_hash
438
- return nil if limits_hash.blank?
485
+ facet = blacklight_config.facet_fields[facet_field]
486
+ return nil if facet.blank?
439
487
 
440
- limit = limits_hash[facet_field]
488
+ limit = facet.limit
441
489
 
442
490
  if ( limit == true && @response &&
443
491
  @response["responseHeader"] &&
@@ -454,16 +502,4 @@ module Blacklight::SolrHelper
454
502
  return limit
455
503
  end
456
504
 
457
- # Returns complete hash of key=facet_field, value=limit.
458
- # Used by SolrHelper#solr_search_params to add limits to solr
459
- # request for all configured facet limits.
460
- def facet_limit_hash
461
- Blacklight.config[:facet][:limits] || {}
462
- end
463
-
464
- def max_per_page
465
- MaxPerPage
466
- end
467
-
468
-
469
505
  end
@@ -0,0 +1,18 @@
1
+ require 'ostruct'
2
+ module Blacklight
3
+ class OpenStructWithHashAccess < OpenStruct
4
+ delegate :keys, :merge, :to => :to_h
5
+
6
+ def []=(key, value)
7
+ send "#{key}=", value
8
+ end
9
+
10
+ def [](key)
11
+ send key
12
+ end
13
+
14
+ def to_h
15
+ @table
16
+ end
17
+ end
18
+ end
@@ -17,37 +17,31 @@ module Blacklight
17
17
  source_root File.expand_path('../templates', __FILE__)
18
18
 
19
19
  def assets
20
- if use_asset_pipeline?
20
+ unless IO.read("app/assets/stylesheets/application.css").include?("Blacklight")
21
+ copy_file('assets/standard.css.scss', 'app/assets/stylesheets/blacklight_themes/standard.css.scss')
21
22
  insert_into_file "app/assets/stylesheets/application.css", :after => "/*" do
22
- %q{
23
- *
24
- * Required by Blacklight
25
- *= require 'yui'
23
+ %q{
24
+ * Required by Blacklight:
26
25
  *= require 'jquery/ui-lightness/jquery-ui-1.8.1.custom.css'
26
+ * This is the standard blacklight theme.
27
27
  *= require 'blacklight/blacklight'
28
- }
28
+ *
29
+ * If you'd like to modify the default theme, please instead require 'blacklight_themes/standard', which
30
+ * is in your local install at app/assets/stylesheets/blacklight_themes/ }
29
31
  end
32
+ end
30
33
 
34
+ unless IO.read("app/assets/javascripts/application.js").include?('blacklight/blacklight')
31
35
  insert_into_file "app/assets/javascripts/application.js", :after => "//= require jquery_ujs" do
32
- %q{
36
+ %q{
37
+ //
33
38
  // Required by Blacklight
34
39
  //= require jquery-ui
35
- //= require blacklight/blacklight
36
- }
40
+ //= require blacklight/blacklight}
37
41
  end
38
- directory("../../../../app/assets/images/blacklight", "public/images/blacklight")
39
- else
40
- # directories are relative to the source_root
41
- directory("../../../../app/assets/images/blacklight", "public/images/blacklight")
42
- directory("../../../../app/assets/stylesheets", "public/stylesheets")
43
- directory("../../../../app/assets/javascripts", "public/javascripts")
44
42
  end
45
- end
46
43
 
47
- private
48
- def use_asset_pipeline?
49
- (Rails::VERSION::MAJOR >= 3 and Rails::VERSION::MINOR >= 1) and Rails.application.config.assets.enabled
44
+ directory("../../../../app/assets/images/blacklight", "app/assets/images/blacklight")
50
45
  end
51
-
52
46
  end
53
47
  end
@@ -110,10 +110,6 @@ EOF
110
110
  better_migration_template "add_user_types_to_bookmarks_searches.rb"
111
111
  end
112
112
 
113
- # Copy ocver the solr_marc.jar file
114
- def copy_solr_marc
115
- copy_file "SolrMarc.jar", "lib/SolrMarc.jar"
116
- end
117
113
 
118
114
  # Add Blacklight to the user model
119
115
  def inject_blacklight_user_behavior
@@ -124,7 +120,7 @@ EOF
124
120
  "\n include Blacklight::User\n"
125
121
  end
126
122
  else
127
- puts " \e[31mFailure\e[0m Blacklight requires a user object in order to presist bookmarks and saved searches. This generators assumes that the model is defined in the file /app/models/user.rb, which does not exist. If you used a different name, please re-run the migration and provide that name as an argument. Such as \b rails -g blacklight client"
123
+ say_status("warning", "Blacklight authenticated user functionality not installed, as a user model could not be found at /app/models/user.rb. If you used a different name, please re-run the migration and provide that name as an argument. Such as `rails -g blacklight client`", :yellow)
128
124
  end
129
125
  end
130
126
 
@@ -150,6 +146,19 @@ EOF
150
146
  route('Blacklight.add_routes(self)')
151
147
  end
152
148
 
149
+ def add_sass_configuration
150
+ insert_into_file "config/application.rb", :after => "config.assets.enabled = true" do <<EOF
151
+
152
+ # Default SASS Configuration, check out https://github.com/rails/sass-rails for details
153
+ config.assets.compress = !Rails.env.development?
154
+ config.sass.line_comments = Rails.env.development?
155
+
156
+ EOF
157
+ end
158
+
159
+ copy_file "config/sass.rb", "config/initializers/sass.rb"
160
+ end
161
+
153
162
  private
154
163
 
155
164
  def better_migration_template (file)
@@ -160,6 +169,5 @@ EOF
160
169
  puts " \e[1m\e[34mMigrations\e[0m " + $!.message
161
170
  end
162
171
  end
163
-
164
172
  end
165
173
 
@@ -11,7 +11,7 @@ module Blacklight
11
11
  # change this to a different download if you want to peg to a different
12
12
  # tagged version of our known-good jetty/solr.
13
13
  OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE # (Required by jruby)
14
- class_option :download_url, :aliases => "-u", :type=>"string", :default =>"https://github.com/projectblacklight/blacklight-jetty/zipball/v1.4.1-1" , :desc=>"location of zip file including a jetty with solr setup for blacklight."
14
+ class_option :download_url, :aliases => "-u", :type=>"string", :default =>"https://github.com/projectblacklight/blacklight-jetty/zipball/v3.5.0" , :desc=>"location of zip file including a jetty with solr setup for blacklight."
15
15
  class_option :downloaded_package, :aliases => "-d", :type=>"string", :desc => "manual download of BL-jetty zip file"
16
16
 
17
17
 
@@ -0,0 +1,51 @@
1
+
2
+ /* Grid parameters */
3
+ /* changing total cols is not recommended unless you're going to redo blacklight/_layout.css.sass */
4
+ $total-cols: 24;
5
+
6
+ /* But the widths are changeable to px, em. */
7
+ $col-width: 2.5em;
8
+ $gutter-width: .5em;
9
+ $side-gutter-width: 2em;
10
+
11
+
12
+ $logo_url: 'blacklight/logo.png';
13
+
14
+ /* Various elements of search customization share these colors */
15
+
16
+ $search_ui_border_color: #AAAAAA;
17
+ $search_ui_bg_color: #F0F0F0;
18
+
19
+ /* separates documents, facets */
20
+ $dotted_border_color: #CCC;
21
+
22
+ /* background color of page */
23
+ $page_bg_color: #2E4F81;
24
+
25
+
26
+ /* label (field names) */
27
+ $field_name_color: #888;
28
+
29
+
30
+ /* constraint (you searched for:) details: */
31
+
32
+ $constraint_bg_color: #E2EDFE;
33
+
34
+ $constraint_border_color: #C4DAFE;
35
+ $constraint_border_active_color: #FFD27A;
36
+
37
+ /* dialog that pops up when you pick more on facets */
38
+ $facet_extended_button_bg_color: #F6F6F6;
39
+ $facet_extended_button_border_color: #CCC;
40
+ $facet_extended_disabled_button_bg_color: #E2EDFE;
41
+ $facet_extended_disabled_border_color: #C4DAFE;
42
+ $facet_extended_button_hover_bg_color: #DADADA;
43
+ $facet_extended_button_hover_border_color: #999;
44
+ $facet_extended_button_hover_color: #212121;
45
+
46
+ /* border between items on marc view */
47
+ $marc_item_separator: 1px solid #CCC;
48
+
49
+ /* uses these variables in the blacklight stylesheet */
50
+ @import 'blacklight/blacklight';
51
+
@@ -5,4 +5,152 @@ class CatalogController < ApplicationController
5
5
 
6
6
  include Blacklight::Catalog
7
7
 
8
+ configure_blacklight do |config|
9
+ config.default_solr_params = {
10
+ :qt => 'search',
11
+ :rows => 10
12
+ }
13
+
14
+ # solr field configuration for search results/index views
15
+ config.index.show_link = 'title_display'
16
+ config.index.record_display_type = 'format'
17
+
18
+ # solr field configuration for document/show views
19
+ config.show.html_title = 'title_display'
20
+ config.show.heading = 'title_display'
21
+ config.show.display_type = 'format'
22
+
23
+ # solr fields that will be treated as facets by the blacklight application
24
+ # The ordering of the field names is the order of the display
25
+ #
26
+ # Setting a limit will trigger Blacklight's 'more' facet values link.
27
+ # * If left unset, then all facet values returned by solr will be displayed.
28
+ # * If set to an integer, then "f.somefield.facet.limit" will be added to
29
+ # solr request, with actual solr request being +1 your configured limit --
30
+ # you configure the number of items you actually want _displayed_ in a page.
31
+ # * If set to 'true', then no additional parameters will be sent to solr,
32
+ # but any 'sniffed' request limit parameters will be used for paging, with
33
+ # paging at requested limit -1. Can sniff from facet.limit or
34
+ # f.specific_field.facet.limit solr request params. This 'true' config
35
+ # can be used if you set limits in :default_solr_params, or as defaults
36
+ # on the solr side in the request handler itself. Request handler defaults
37
+ # sniffing requires solr requests to be made with "echoParams=all", for
38
+ # app code to actually have it echo'd back to see it.
39
+ config.add_facet_field 'format', :label => 'Format'
40
+ config.add_facet_field 'pub_date', :label => 'Publication Year'
41
+ config.add_facet_field 'subject_topic_facet', :label => 'Topic', :limit => 20
42
+ config.add_facet_field 'language_facet', :label => 'Language', :limit => true
43
+ config.add_facet_field 'lc_1letter_facet', :label => 'Call Number'
44
+ config.add_facet_field 'subject_geo_facet', :label => 'Region'
45
+ config.add_facet_field 'subject_era_facet', :label => 'Era'
46
+
47
+ # Have BL send all facet field names to Solr, which has been the default
48
+ # previously. Simply remove these lines if you'd rather use Solr request
49
+ # handler defaults, or have no facets.
50
+ config.default_solr_params[:'facet.field'] = config.facet_fields.keys
51
+
52
+ # solr fields to be displayed in the index (search results) view
53
+ # The ordering of the field names is the order of the display
54
+ config.add_index_field 'title_display', :label => 'Title:'
55
+ config.add_index_field 'title_vern_display', :label => 'Title:'
56
+ config.add_index_field 'author_display', :label => 'Author:'
57
+ config.add_index_field 'author_vern_display', :label => 'Author:'
58
+ config.add_index_field 'format', :label => 'Format:'
59
+ config.add_index_field 'language_facet', :label => 'Language:'
60
+ config.add_index_field 'published_display', :label => 'Published:'
61
+ config.add_index_field 'published_vern_display', :label => 'Published:'
62
+ config.add_index_field 'lc_callnum_display', :label => 'Call number:'
63
+
64
+ # solr fields to be displayed in the show (single result) view
65
+ # The ordering of the field names is the order of the display
66
+ config.add_show_field 'title_display', :label => 'Title:'
67
+ config.add_show_field 'title_vern_display', :label => 'Title:'
68
+ config.add_show_field 'subtitle_display', :label => 'Subtitle:'
69
+ config.add_show_field 'subtitle_vern_display', :label => 'Subtitle:'
70
+ config.add_show_field 'author_display', :label => 'Author:'
71
+ config.add_show_field 'author_vern_display', :label => 'Author:'
72
+ config.add_show_field 'format', :label => 'Format:'
73
+ config.add_show_field 'url_fulltext_display', :label => 'URL:'
74
+ config.add_show_field 'url_suppl_display', :label => 'More Information:'
75
+ config.add_show_field 'language_facet', :label => 'Language:'
76
+ config.add_show_field 'published_display', :label => 'Published:'
77
+ config.add_show_field 'published_vern_display', :label => 'Published:'
78
+ config.add_show_field 'lc_callnum_display', :label => 'Call number:'
79
+ config.add_show_field 'isbn_t', :label => 'ISBN:'
80
+
81
+ # "fielded" search configuration. Used by pulldown among other places.
82
+ # For supported keys in hash, see rdoc for Blacklight::SearchFields
83
+ #
84
+ # Search fields will inherit the :qt solr request handler from
85
+ # config[:default_solr_parameters], OR can specify a different one
86
+ # with a :qt key/value. Below examples inherit, except for subject
87
+ # that specifies the same :qt as default for our own internal
88
+ # testing purposes.
89
+ #
90
+ # The :key is what will be used to identify this BL search field internally,
91
+ # as well as in URLs -- so changing it after deployment may break bookmarked
92
+ # urls. A display label will be automatically calculated from the :key,
93
+ # or can be specified manually to be different.
94
+
95
+ # This one uses all the defaults set by the solr request handler. Which
96
+ # solr request handler? The one set in config[:default_solr_parameters][:qt],
97
+ # since we aren't specifying it otherwise.
98
+
99
+ config.add_search_field 'all_fields', :label => 'All Fields'
100
+
101
+
102
+ # Now we see how to over-ride Solr request handler defaults, in this
103
+ # case for a BL "search field", which is really a dismax aggregate
104
+ # of Solr search fields.
105
+
106
+ config.add_search_field('title') do |field|
107
+ # solr_parameters hash are sent to Solr as ordinary url query params.
108
+ field.solr_parameters = { :'spellcheck.dictionary' => 'title' }
109
+
110
+ # :solr_local_parameters will be sent using Solr LocalParams
111
+ # syntax, as eg {! qf=$title_qf }. This is neccesary to use
112
+ # Solr parameter de-referencing like $title_qf.
113
+ # See: http://wiki.apache.org/solr/LocalParams
114
+ field.solr_local_parameters = {
115
+ :qf => '$title_qf',
116
+ :pf => '$title_pf'
117
+ }
118
+ end
119
+
120
+ config.add_search_field('author') do |field|
121
+ field.solr_parameters = { :'spellcheck.dictionary' => 'author' }
122
+ field.solr_local_parameters = {
123
+ :qf => '$author_qf',
124
+ :pf => '$author_pf'
125
+ }
126
+ end
127
+
128
+ # Specifying a :qt only to show it's possible, and so our internal automated
129
+ # tests can test it. In this case it's the same as
130
+ # config[:default_solr_parameters][:qt], so isn't actually neccesary.
131
+ config.add_search_field('subject') do |field|
132
+ field.solr_parameters = { :'spellcheck.dictionary' => 'subject' }
133
+ field.qt = 'search'
134
+ field.solr_local_parameters = {
135
+ :qf => '$subject_qf',
136
+ :pf => '$subject_pf'
137
+ }
138
+ end
139
+
140
+ # "sort results by" select (pulldown)
141
+ # label in pulldown is followed by the name of the SOLR field to sort by and
142
+ # whether the sort is ascending or descending (it must be asc or desc
143
+ # except in the relevancy case).
144
+ config.add_sort_field 'score desc, pub_date_sort desc, title_sort asc', :label => 'relevance'
145
+ config.add_sort_field 'pub_date_sort desc, title_sort asc', :label => 'year'
146
+ config.add_sort_field 'author_sort asc, title_sort asc', :label => 'author'
147
+ config.add_sort_field 'title_sort asc, pub_date_sort desc', :label => 'title'
148
+
149
+ # If there are more than this many search results, no spelling ("did you
150
+ # mean") suggestion is offered.
151
+ config.spell_max = 5
152
+ end
153
+
154
+
155
+
8
156
  end