blacklight 5.1.1 → 5.2.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.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -0
  3. data/VERSION +1 -1
  4. data/app/assets/javascripts/blacklight/search_context.js +38 -24
  5. data/app/helpers/blacklight/blacklight_helper_behavior.rb +49 -70
  6. data/app/helpers/blacklight/catalog_helper_behavior.rb +1 -8
  7. data/app/helpers/blacklight/configuration_helper_behavior.rb +10 -2
  8. data/app/helpers/blacklight/facets_helper_behavior.rb +4 -1
  9. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +2 -2
  10. data/app/helpers/blacklight/url_helper_behavior.rb +41 -7
  11. data/app/views/catalog/_facet_layout.html.erb +2 -2
  12. data/app/views/catalog/_per_page_widget.html.erb +4 -4
  13. data/app/views/catalog/_previous_next_doc.html.erb +1 -1
  14. data/app/views/catalog/_show_tools.html.erb +1 -1
  15. data/app/views/catalog/show.html.erb +1 -1
  16. data/app/views/layouts/blacklight.html.erb +1 -1
  17. data/blacklight.gemspec +1 -1
  18. data/config/jetty.yml +3 -0
  19. data/config/locales/blacklight.es.yml +220 -0
  20. data/gemfiles/rails4.1.gemfile +10 -0
  21. data/lib/blacklight/base.rb +1 -1
  22. data/lib/blacklight/catalog/search_context.rb +15 -15
  23. data/lib/blacklight/catalog.rb +19 -6
  24. data/lib/blacklight/configuration.rb +126 -31
  25. data/lib/blacklight/document_presenter.rb +168 -0
  26. data/lib/blacklight/request_builders.rb +288 -0
  27. data/lib/blacklight/routes.rb +6 -2
  28. data/lib/blacklight/solr/request.rb +1 -1
  29. data/lib/blacklight/solr_helper.rb +50 -323
  30. data/lib/blacklight/solr_response/facets.rb +7 -3
  31. data/lib/blacklight/utils.rb +39 -7
  32. data/lib/blacklight.rb +5 -3
  33. data/lib/generators/blacklight/install_generator.rb +17 -5
  34. data/lib/generators/blacklight/models_generator.rb +0 -1
  35. data/lib/generators/blacklight/templates/catalog_controller.rb +6 -0
  36. data/lib/generators/blacklight/templates/config/jetty.yml +8 -4
  37. data/lib/generators/blacklight/templates/config/solr.yml +2 -0
  38. data/spec/controllers/catalog_controller_spec.rb +41 -22
  39. data/spec/features/alternate_controller_spec.rb +1 -1
  40. data/spec/features/search_filters_spec.rb +24 -24
  41. data/spec/features/search_results_spec.rb +9 -4
  42. data/spec/features/search_sort_spec.rb +1 -1
  43. data/spec/helpers/blacklight_helper_spec.rb +87 -0
  44. data/spec/helpers/catalog_helper_spec.rb +5 -10
  45. data/spec/helpers/configuration_helper_spec.rb +22 -1
  46. data/spec/helpers/facets_helper_spec.rb +6 -0
  47. data/spec/helpers/render_constraints_helper_spec.rb +1 -2
  48. data/spec/helpers/url_helper_spec.rb +45 -2
  49. data/spec/lib/blacklight/routes_spec.rb +4 -4
  50. data/spec/lib/blacklight/solr_helper_spec.rb +364 -253
  51. data/spec/lib/blacklight/solr_response/facets_spec.rb +82 -0
  52. data/spec/lib/blacklight/solr_response_spec.rb +3 -1
  53. data/spec/lib/document_presenter_spec.rb +216 -0
  54. data/spec/lib/utils_spec.rb +8 -0
  55. data/spec/test_app_templates/lib/generators/test_app_generator.rb +1 -1
  56. data/spec/views/catalog/index.html.erb_spec.rb +29 -21
  57. data/spec/views/catalog/show.html.erb_spec.rb +11 -7
  58. data/template.demo.rb +20 -0
  59. metadata +12 -4
  60. data/lib/generators/blacklight/jetty_generator.rb +0 -70
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3a001b98201040df18b0c251d644db58d7b462cb
4
- data.tar.gz: f193d5ea8bb6f8b106e525884982a34578c50cf1
3
+ metadata.gz: fea671a4828e18416d64b657b46a176d12825b99
4
+ data.tar.gz: 559e98ff68f295b5f353eb50272eebf4b856443e
5
5
  SHA512:
6
- metadata.gz: 632d7373d5a5060a2459df1d57c57d26bfe5584bb7c7883e3382f9190f8b53eef02450bd971e282fb1e8912c9411ce1b665efab6bc2f6c81beb02c7cc00c720d
7
- data.tar.gz: 991c52e5c79ececb1a29300ce97a8f457c8489cbb2447a6913374d6c24bfb8b9a7fc5802a9af279dfeaf0aaa95bb6b2089b7503377a98cc4c246c00016a2260f
6
+ metadata.gz: 665816f47ac58bbdff19053888a885fe2b4b682e56b59bcf390e859c0d2c4f8b2aac7dd07bdd269eb620ff2d5271bcd9e0527dba75423c920a83d08502bf24e8
7
+ data.tar.gz: 37756999f96379e3908381a2959e6437533a7f0c860ccd29479bac5e64a24f9ed0014b207169641d6de1368b8204b6bd81c52ae8e6a7bff58b4631cb4d624697
data/.travis.yml CHANGED
@@ -2,6 +2,7 @@ notifications:
2
2
  email: false
3
3
 
4
4
  rvm:
5
+ - 2.1.1
5
6
  - 2.1.0
6
7
  - 2.0.0
7
8
  - 1.9.3
@@ -13,6 +14,7 @@ before_install:
13
14
  gemfile:
14
15
  - gemfiles/rails3.gemfile
15
16
  - gemfiles/rails4.gemfile
17
+ - gemfiles/rails4.1.gemfile
16
18
 
17
19
  notifications:
18
20
  irc: "irc.freenode.org#blacklight"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 5.1.1
1
+ 5.2.0
@@ -1,28 +1,42 @@
1
1
  //= require blacklight/core
2
2
  (function($) {
3
3
  Blacklight.do_search_context_behavior = function() {
4
- $('a[data-counter]').click(function(event) {
5
- var f = document.createElement('form'); f.style.display = 'none';
6
- this.parentNode.appendChild(f);
7
- f.method = 'POST';
8
- f.action = $(this).attr('href');
9
- if(event.metaKey || event.ctrlKey){f.target = '_blank';};
10
- var d = document.createElement('input'); d.setAttribute('type', 'hidden');
11
- d.setAttribute('name', 'counter'); d.setAttribute('value', $(this).data('counter')); f.appendChild(d);
12
- var id = document.createElement('input'); id.setAttribute('type', 'hidden');
13
- id.setAttribute('name', 'search_id'); id.setAttribute('value', $(this).data('search_id')); f.appendChild(id);
14
- var m = document.createElement('input'); m.setAttribute('type', 'hidden');
15
- m.setAttribute('name', '_method'); m.setAttribute('value', 'put'); f.appendChild(m);
16
- var m = document.createElement('input'); m.setAttribute('type', 'hidden');
17
- m.setAttribute('name', $('meta[name="csrf-param"]').attr('content')); m.setAttribute('value', $('meta[name="csrf-token"]').attr('content')); f.appendChild(m);
18
-
19
- f.submit();
20
-
21
- return false;
22
- });
23
-
24
- };
25
- Blacklight.onLoad(function() {
26
- Blacklight.do_search_context_behavior();
27
- });
4
+ $('a[data-context-href]').on('click.search-context', Blacklight.handleSearchContextMethod);
5
+ };
6
+
7
+ // this is the $.rails.handleMethod with a couple adjustments, described inline:
8
+ // first, we're attaching this directly to the event handler, so we can check for meta-keys
9
+ Blacklight.handleSearchContextMethod = function(event) {
10
+ var link = $(this);
11
+
12
+ // instead of using the normal href, we need to use the context href instead
13
+ var href = link.data('context-href'),
14
+ method = 'post',
15
+ target = link.attr('target'),
16
+ csrfToken = $('meta[name=csrf-token]').attr('content'),
17
+ csrfParam = $('meta[name=csrf-param]').attr('content'),
18
+ form = $('<form method="post" action="' + href + '"></form>'),
19
+ metadataInput = '<input name="_method" value="' + method + '" type="hidden" />',
20
+ redirectHref = '<input name="redirect" value="' + link.attr('href') + '" type="hidden" />';
21
+
22
+ // check for meta keys.. if set, we should open in a new tab
23
+ if(event.metaKey || event.ctrlKey) {
24
+ target = '_blank';
25
+ }
26
+
27
+ if (csrfParam !== undefined && csrfToken !== undefined) {
28
+ metadataInput += '<input name="' + csrfParam + '" value="' + csrfToken + '" type="hidden" />';
29
+ }
30
+
31
+ if (target) { form.attr('target', target); }
32
+
33
+ form.hide().append(metadataInput).append(redirectHref).appendTo('body');
34
+ form.submit();
35
+
36
+ return false;
37
+ };
38
+
39
+ Blacklight.onLoad(function() {
40
+ Blacklight.do_search_context_behavior();
41
+ });
28
42
  })(jQuery);
@@ -15,13 +15,21 @@ module Blacklight::BlacklightHelperBehavior
15
15
  # - the Rails configuration
16
16
  # - an i18n string (key: blacklight.application_name; preferred)
17
17
  #
18
- # @return [String] the application named
18
+ # @return [String] the application name
19
19
  def application_name
20
20
  return Rails.application.config.application_name if Rails.application.config.respond_to? :application_name
21
21
 
22
22
  t('blacklight.application_name')
23
23
  end
24
24
 
25
+ ##
26
+ # Get the page's HTML title
27
+ #
28
+ # @return [String]
29
+ def render_page_title
30
+ (content_for(:page_title) if content_for?(:page_title)) || @page_title || application_name
31
+ end
32
+
25
33
  ##
26
34
  # Create <link rel="alternate"> links from a documents dynamically
27
35
  # provided export formats. Currently not used by standard BL layouts,
@@ -201,10 +209,7 @@ module Blacklight::BlacklightHelperBehavior
201
209
  document = args.shift || options[:document]
202
210
 
203
211
  field = args.shift || options[:field]
204
- field_config = index_fields(document)[field]
205
- value = options[:value] || get_field_values(document, field, field_config, options)
206
-
207
- render_field_value value, field_config
212
+ presenter(document).render_index_field_value field, options
208
213
  end
209
214
 
210
215
  ##
@@ -226,7 +231,7 @@ module Blacklight::BlacklightHelperBehavior
226
231
 
227
232
  field = options[:field]
228
233
 
229
- html_escape t(:'blacklight.search.show.label', label: document_show_field_label(document, field))
234
+ t(:'blacklight.search.show.label', label: document_show_field_label(document, field))
230
235
  end
231
236
 
232
237
  ##
@@ -257,10 +262,7 @@ module Blacklight::BlacklightHelperBehavior
257
262
  document = args.shift || options[:document]
258
263
 
259
264
  field = args.shift || options[:field]
260
- field_config = document_show_fields(document)[field]
261
- value = options[:value] || get_field_values(document, field, field_config, options)
262
-
263
- render_field_value value, field_config
265
+ presenter(document).render_document_show_field_value field, options
264
266
  end
265
267
 
266
268
  ##
@@ -271,7 +273,7 @@ module Blacklight::BlacklightHelperBehavior
271
273
  # @return [String]
272
274
  def document_heading document=nil
273
275
  document ||= @document
274
- render_field_value(document[blacklight_config.view_config(:show).title_field] || document.id)
276
+ presenter(document).document_heading
275
277
  end
276
278
 
277
279
  ##
@@ -284,11 +286,7 @@ module Blacklight::BlacklightHelperBehavior
284
286
  def document_show_html_title document=nil
285
287
  document ||= @document
286
288
 
287
- if blacklight_config.view_config(:show).html_title_field
288
- render_field_value(document[blacklight_config.view_config(:show).html_title_field])
289
- else
290
- document_heading document
291
- end
289
+ presenter(document).document_show_html_title
292
290
  end
293
291
 
294
292
  ##
@@ -310,7 +308,7 @@ module Blacklight::BlacklightHelperBehavior
310
308
 
311
309
  tag ||= :h4
312
310
 
313
- content_tag(tag, render_field_value(document_heading(document)), :itemprop => "name")
311
+ content_tag(tag, presenter(document).document_heading, :itemprop => "name")
314
312
  end
315
313
 
316
314
  ##
@@ -329,55 +327,18 @@ module Blacklight::BlacklightHelperBehavior
329
327
  # @param [Blacklight::Solr::Configuration::SolrField] solr field configuration
330
328
  # @param [Hash] options additional options to pass to the rendering helpers
331
329
  def get_field_values document, field, field_config, options = {}
332
- # retrieving values
333
- value = case
334
- when (field_config and field_config.highlight)
335
- # retrieve the document value from the highlighting response
336
- document.highlight_field(field_config.field).map { |x| x.html_safe } if document.has_highlight_field? field_config.field
337
- when (field_config and field_config.accessor)
338
- # implicit method call
339
- if field_config.accessor === true
340
- document.send(field)
341
- # arity-1 method call (include the field name in the call)
342
- elsif !field_config.accessor.is_a?(Array) && document.method(field_config.accessor).arity != 0
343
- document.send(field_config.accessor, field)
344
- # chained method calls
345
- else
346
- Array(field_config.accessor).inject(document) do |result, method|
347
- result.send(method)
348
- end
349
- end
350
- else
351
- # regular solr
352
- document.get(field, :sep => nil) if field
353
- end
354
-
355
- # rendering values
356
- case
357
- when (field_config and field_config.helper_method)
358
- send(field_config.helper_method, options.merge(:document => document, :field => field, :value => value))
359
- when (field_config and field_config.link_to_search)
360
- link_field = if field_config.link_to_search === true
361
- field_config.field
362
- else
363
- field_config.link_to_search
364
- end
365
-
366
- Array(value).map do |v|
367
- link_to render_field_value(v, field_config), search_action_path(add_facet_params(link_field, v, {}))
368
- end if field
369
- else
370
- value
371
- end
330
+ presenter(document).get_field_values field, field_config, options
372
331
  end
373
332
 
374
333
  ##
375
334
  # Render a value (or array of values) from a field
376
335
  #
336
+ # @deprecated Use DocumentPresenter instead
377
337
  # @param [String] value or list of values to display
378
338
  # @param [Blacklight::Solr::Configuration::SolrField] solr field configuration
379
339
  # @return [String]
380
340
  def render_field_value value=nil, field_config=nil
341
+ Deprecation.warn self, "render_field_value is deprecated. Use DocumentPresenter.render_field_value instead"
381
342
  safe_values = Array(value).collect { |x| x.respond_to?(:force_encoding) ? x.force_encoding("UTF-8") : x }
382
343
 
383
344
  if field_config and field_config.itemprop
@@ -392,6 +353,7 @@ module Blacklight::BlacklightHelperBehavior
392
353
  #
393
354
  # @return [String]
394
355
  def field_value_separator
356
+ Deprecation.warn self, "field_value_separator is deprecated. Use DocumentPresenter.field_value_separator instead"
395
357
  ', '
396
358
  end
397
359
 
@@ -466,19 +428,25 @@ module Blacklight::BlacklightHelperBehavior
466
428
 
467
429
  ##
468
430
  # Return a normalized partial name for rendering a single document
469
- #
431
+ #
470
432
  # @param [SolrDocument]
433
+ # @param [Symbol] base name for the partial
471
434
  # @return [String]
472
- def document_partial_name(document)
473
- display_type = document[blacklight_config.view_config(:show).display_type_field]
435
+ def document_partial_name(document, base_name = nil)
436
+ view_config = blacklight_config.view_config(:show)
437
+
438
+ display_type = if base_name and view_config.has_key? :"#{base_name}_display_type_field"
439
+ document[view_config[:"#{base_name}_display_type_field"]]
440
+ end
441
+
442
+ display_type ||= document[view_config.display_type_field]
474
443
 
475
- return 'default' unless display_type
476
- display_type = display_type.join(" ") if display_type.respond_to?(:join)
444
+ display_type ||= 'default'
477
445
 
478
446
  # .to_s is necessary otherwise the default return value is not always a string
479
447
  # using "_" as sep. to more closely follow the views file naming conventions
480
448
  # parameterize uses "-" as the default sep. which throws errors
481
- "#{display_type.gsub("-"," ")}".parameterize("_").to_s
449
+ Array(display_type).join(" ").gsub("-","_").parameterize("_")
482
450
  end
483
451
 
484
452
  ##
@@ -504,7 +472,12 @@ module Blacklight::BlacklightHelperBehavior
504
472
  # @param [String] base name for the partial
505
473
  # @param [Hash] locales to pass through to the partials
506
474
  def render_document_partial(doc, base_name, locals = {})
507
- format = document_partial_name(doc)
475
+ format = if method(:document_partial_name).arity == 1
476
+ Deprecation.warn self, "The #document_partial_name with a single argument is deprecated. Update your override to include a second argument for the 'base name'"
477
+ document_partial_name(doc)
478
+ else
479
+ document_partial_name(doc, base_name)
480
+ end
508
481
 
509
482
  document_partial_path_templates.each do |str|
510
483
  # XXX rather than handling this logic through exceptions, maybe there's a Rails internals method
@@ -544,12 +517,7 @@ module Blacklight::BlacklightHelperBehavior
544
517
  # @option opts [Proc] :label Evaluate the given proc
545
518
  # @option opts [String] :label Render the given string
546
519
  def render_document_index_label doc, opts = {}
547
- label = nil
548
- label ||= doc.get(opts[:label], :sep => nil) if opts[:label].instance_of? Symbol
549
- label ||= opts[:label].call(doc, opts) if opts[:label].instance_of? Proc
550
- label ||= opts[:label] if opts[:label].is_a? String
551
- label ||= doc.id
552
- render_field_value label
520
+ presenter(doc).render_document_index_label opts
553
521
  end
554
522
 
555
523
  ##
@@ -582,4 +550,15 @@ module Blacklight::BlacklightHelperBehavior
582
550
  has_user_authentication_provider? and current_or_guest_user.present?
583
551
  end
584
552
 
553
+ ##
554
+ # Returns a document presenter for the given document
555
+ def presenter(document)
556
+ presenter_class.new(document, self)
557
+ end
558
+
559
+ ##
560
+ # Override this method if you want to use a different presenter class
561
+ def presenter_class
562
+ Blacklight::DocumentPresenter
563
+ end
585
564
  end
@@ -61,7 +61,7 @@ module Blacklight::CatalogHelperBehavior
61
61
  # @see #page_entries_info
62
62
  # @return [String]
63
63
  def item_page_entry_info
64
- t('blacklight.search.entry_pagination_info.other', :current => number_with_delimiter(search_session[:counter]), :total => number_with_delimiter(search_session[:total]), :count => search_session[:total].to_i).html_safe
64
+ t('blacklight.search.entry_pagination_info.other', :current => number_with_delimiter(search_session['counter']), :total => number_with_delimiter(search_session['total']), :count => search_session['total'].to_i).html_safe
65
65
  end
66
66
 
67
67
  ##
@@ -113,13 +113,6 @@ module Blacklight::CatalogHelperBehavior
113
113
  render :partial => 'show_sidebar'
114
114
  end
115
115
 
116
- ##
117
- # Check if any search parameters have been set
118
- # @return [Boolean]
119
- def has_search_parameters?
120
- !params[:q].blank? or !params[:f].blank? or !params[:search_field].blank?
121
- end
122
-
123
116
  ##
124
117
  # Should we display the sort and per page widget?
125
118
  #
@@ -116,6 +116,14 @@ module Blacklight::ConfigurationHelperBehavior
116
116
  ##
117
117
  # The default value for search results per page
118
118
  def default_per_page
119
- blacklight_config.per_page.first unless blacklight_config.per_page.blank?
119
+ blacklight_config.default_per_page || blacklight_config.per_page.first
120
120
  end
121
- end
121
+
122
+ ##
123
+ # The available options for results per page, in the style of #options_for_select
124
+ def per_page_options_for_select
125
+ blacklight_config.per_page.map do |count|
126
+ [t(:'blacklight.search.per_page.label', :count => count).html_safe, count]
127
+ end
128
+ end
129
+ end
@@ -166,7 +166,7 @@ module Blacklight::FacetsHelperBehavior
166
166
 
167
167
  value = facet_value_for_facet_item(item)
168
168
 
169
- facet_field_in_params?(field) and params[:f][field].include?(value)
169
+ params[:f] and params[:f][field] and params[:f][field].include?(value)
170
170
  end
171
171
 
172
172
  ##
@@ -198,6 +198,9 @@ module Blacklight::FacetsHelperBehavior
198
198
  end
199
199
  end
200
200
 
201
+ def facet_field_id facet_field
202
+ "facet-#{facet_field.field.parameterize}"
203
+ end
201
204
 
202
205
  private
203
206
 
@@ -19,13 +19,13 @@ module Blacklight::SearchHistoryConstraintsHelperBehavior
19
19
  ##
20
20
  # Render the search query constraint
21
21
  def render_search_to_s_q(params)
22
- return "".html_safe if params[:q].blank?
22
+ return "".html_safe if params['q'].blank?
23
23
 
24
24
  label = (default_search_field && params[:search_field] == default_search_field[:key]) ?
25
25
  nil :
26
26
  label_for_search_field(params[:search_field])
27
27
 
28
- render_search_to_s_element(label , render_filter_value(params[:q]) )
28
+ render_search_to_s_element(label , render_filter_value(params['q']) )
29
29
  end
30
30
 
31
31
  ##
@@ -1,11 +1,19 @@
1
+ require 'deprecation'
1
2
  module Blacklight::UrlHelperBehavior
3
+ extend Deprecation
4
+ self.deprecation_horizon = 'blacklight 6.0'
2
5
 
3
6
  ##
4
7
  # Extension point for downstream applications
5
- # to provide more interesting routing to
8
+ # to provide more interesting routing to
6
9
  # documents
7
10
  def url_for_document doc
8
- doc
11
+ if controller.is_a? Blacklight::Catalog and doc.is_a? SolrDocument and
12
+ (!doc.respond_to?(:to_model) or doc.to_model.is_a? SolrDocument)
13
+ { controller: controller_name, action: :show, id: doc }
14
+ else
15
+ doc
16
+ end
9
17
  end
10
18
 
11
19
  # link_to_document(doc, :label=>'VIEW', :counter => 3)
@@ -15,13 +23,19 @@ module Blacklight::UrlHelperBehavior
15
23
  def link_to_document(doc, opts={:label=>nil, :counter => nil})
16
24
  opts[:label] ||= document_show_link_field(doc)
17
25
  label = render_document_index_label doc, opts
18
- link_to label, url_for_document(doc), search_session_params(opts[:counter]).merge(opts.reject { |k,v| [:label, :counter].include? k })
26
+ link_to label, url_for_document(doc), document_link_params(doc, opts)
19
27
  end
20
28
 
29
+ def document_link_params(doc, opts)
30
+ session_tracking_params(doc, opts[:counter]).deep_merge(opts.except(:label, :counter))
31
+ end
32
+ protected :document_link_params
33
+
21
34
  ##
22
35
  # Link to the previous document in the current search context
23
36
  def link_to_previous_document(previous_document)
24
- link_to_unless previous_document.nil?, raw(t('views.pagination.previous')), url_for_document(previous_document), search_session_params(search_session[:counter].to_i - 1).merge(:class => "previous", :rel => 'prev') do
37
+ link_opts = session_tracking_params(previous_document, search_session['counter'].to_i - 1).merge(:class => "previous", :rel => 'prev')
38
+ link_to_unless previous_document.nil?, raw(t('views.pagination.previous')), url_for_document(previous_document), link_opts do
25
39
  content_tag :span, raw(t('views.pagination.previous')), :class => 'previous'
26
40
  end
27
41
  end
@@ -29,16 +43,35 @@ module Blacklight::UrlHelperBehavior
29
43
  ##
30
44
  # Link to the next document in the current search context
31
45
  def link_to_next_document(next_document)
32
- link_to_unless next_document.nil?, raw(t('views.pagination.next')), url_for_document(next_document), search_session_params(search_session[:counter].to_i + 1).merge(:class => "next", :rel => 'next') do
46
+ link_opts = session_tracking_params(next_document, search_session['counter'].to_i + 1).merge(:class => "next", :rel => 'next')
47
+ link_to_unless next_document.nil?, raw(t('views.pagination.next')), url_for_document(next_document), link_opts do
33
48
  content_tag :span, raw(t('views.pagination.next')), :class => 'next'
34
49
  end
35
50
  end
36
51
 
37
52
  ##
38
53
  # Current search context parameters
39
- def search_session_params counter
54
+ def search_session_params counter
40
55
  { :'data-counter' => counter, :'data-search_id' => current_search_session.try(:id) }
41
56
  end
57
+ deprecation_deprecate :search_session_params
58
+
59
+ ##
60
+ # Attributes for a link that gives a URL we can use to track clicks for the current search session
61
+ # @param [SolrDocument] document
62
+ # @param [Integer] counter
63
+ # @example
64
+ # session_tracking_params(SolrDocument.new(id: 123), 7)
65
+ # => { data: { :'tracker-href' => '/catalog/123/track?counter=7&search_id=999' } }
66
+ def session_tracking_params document, counter
67
+ if document.nil?
68
+ return {}
69
+ end
70
+
71
+ { :data => {:'context-href' => track_solr_document_path(document, counter: counter, search_id: current_search_session.try(:id))}}
72
+ end
73
+ protected :session_tracking_params
74
+
42
75
 
43
76
  #
44
77
  # link based helpers ->
@@ -140,7 +173,7 @@ module Blacklight::UrlHelperBehavior
140
173
  # Reset any search parameters that store search context
141
174
  # and need to be reset when e.g. constraints change
142
175
  def reset_search_params source_params
143
- sanitize_search_params(source_params).except :page, :counter
176
+ sanitize_search_params(source_params).except(:page, :counter).with_indifferent_access
144
177
  end
145
178
 
146
179
  # adds the value and/or field to params[:f]
@@ -212,6 +245,7 @@ module Blacklight::UrlHelperBehavior
212
245
  p[:f][field] = (p[:f][field] || []).dup
213
246
  p[:f][field] = p[:f][field] - [value]
214
247
  p[:f].delete(field) if p[:f][field].size == 0
248
+ p.delete(:f) if p[:f].empty?
215
249
  p
216
250
  end
217
251
 
@@ -1,10 +1,10 @@
1
1
  <div class="panel panel-default facet_limit blacklight-<%= facet_field.field.parameterize %> <%= 'facet_limit-active' if facet_field_in_params?(facet_field.field) %>">
2
- <div class="<%= "collapsed" if should_collapse_facet?(facet_field) %> collapse-toggle panel-heading" data-toggle="collapse" data-target="#facet-<%= facet_field.label.parameterize %>">
2
+ <div class="<%= "collapsed" if should_collapse_facet?(facet_field) %> collapse-toggle panel-heading" data-toggle="collapse" data-target="#<%= facet_field_id(facet_field) %>">
3
3
  <h5 class="panel-title">
4
4
  <%= link_to facet_field_label(facet_field.field), "#", :"data-no-turbolink" => true %>
5
5
  </h5>
6
6
  </div>
7
- <div id="facet-<%= facet_field.label.parameterize %>" class="panel-collapse facet-content <%= should_collapse_facet?(facet_field) ? 'collapse' : 'in' %>">
7
+ <div id="<%= facet_field_id(facet_field) %>" class="panel-collapse facet-content <%= should_collapse_facet?(facet_field) ? 'collapse' : 'in' %>">
8
8
  <div class="panel-body">
9
9
  <%= yield %>
10
10
  </div>
@@ -4,9 +4,9 @@
4
4
  <div id="per_page-dropdown" class="btn-group">
5
5
  <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"><%= link_to(t(:'blacklight.search.per_page.button_label', :count => current_per_page), "#") %> <span class="caret"></span></button>
6
6
  <ul class="dropdown-menu">
7
- <%- blacklight_config.per_page.each do |count| %>
8
- <li><%= link_to(t(:'blacklight.search.per_page.label', :count => count).html_safe, url_for(params_for_search(:per_page => count))) %></li>
9
- <%- end -%>
7
+ <%- per_page_options_for_select.each do |(label, count)| %>
8
+ <li><%= link_to(label, url_for(params_for_search(:per_page => count))) %></li>
9
+ <%- end -%>
10
10
  </ul>
11
11
  </div>
12
- <% end %>
12
+ <% end %>
@@ -15,4 +15,4 @@
15
15
  <%=link_to "#{t('blacklight.search.start_over')}", start_over_path(current_search_session.try(:query_params) || {}), :id=>"startOverLink", :class => 'btn' %>
16
16
  </div>
17
17
  </div>
18
- <% end %>
18
+ <% end %>
@@ -13,7 +13,7 @@
13
13
  </div>
14
14
 
15
15
  <div class="panel-body">
16
- <ul class="nav nav-list">
16
+ <ul class="nav">
17
17
  <li>
18
18
  <%= render_show_doc_actions @document %>
19
19
  </li>
@@ -3,7 +3,7 @@
3
3
  <%= render 'previous_next_doc' %>
4
4
 
5
5
 
6
- <% @page_title = t('blacklight.search.show.title', :document_title => document_show_html_title, :application_name => application_name) -%>
6
+ <% @page_title = t('blacklight.search.show.title', :document_title => document_show_html_title, :application_name => application_name).html_safe -%>
7
7
  <% content_for(:head) { render_link_rel_alternates } -%>
8
8
  <%# this should be in a partial -%>
9
9
 
@@ -13,7 +13,7 @@
13
13
  <meta http-equiv="cleartype" content="on">
14
14
  <![endif]-->
15
15
 
16
- <title><%= h(@page_title || application_name) %></title>
16
+ <title><%= render_page_title %></title>
17
17
  <link href="<%= opensearch_catalog_path(:format => 'xml', :only_path => false) %>" title="<%= application_name%>" type="application/opensearchdescription+xml" rel="search"/>
18
18
  <%= favicon_link_tag asset_path('favicon.ico') %>
19
19
  <%= stylesheet_link_tag "application" %>
data/blacklight.gemspec CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.add_dependency "bootstrap-sass", "~> 3.0"
25
25
  s.add_dependency "deprecation"
26
26
 
27
- s.add_development_dependency "jettywrapper", ">= 1.5.2"
27
+ s.add_development_dependency "jettywrapper", ">= 1.7.0"
28
28
  s.add_development_dependency "blacklight-marc", "~> 5.0"
29
29
  s.add_development_dependency "rspec-rails"
30
30
  s.add_development_dependency "capybara"
data/config/jetty.yml CHANGED
@@ -5,3 +5,6 @@ test:
5
5
  startup_wait: 60
6
6
  jetty_port: <%= ENV['TEST_JETTY_PORT'] || 8888 %>
7
7
  <%= ENV['TEST_JETTY_PATH'] ? "jetty_home: " + ENV['TEST_JETTY_PATH'] : '' %>
8
+ production:
9
+ startup_wait: 15
10
+ jetty_port: 8983