blacklight 5.0.0.pre4 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bf405f02c6be2140ca50f003ba8f9b39f7a0db26
4
- data.tar.gz: c8bf97338f9612b578826b97cea817a7c8e9f5ab
3
+ metadata.gz: 7c8f10c08ef2255599634c398a2e28201f7bbbf6
4
+ data.tar.gz: 1275af21c316d9b9c4f723eaecac370298e0b10a
5
5
  SHA512:
6
- metadata.gz: 576d597de0b7541de63349e3f99e46a0c9a84fa9425108a0e33c91b91a7f00dac8693635430ffc11df7deb1990bc353536de33808baa9fc6cbd4d8eeeaf4dee1
7
- data.tar.gz: 56a327ccf26e7d3eade183580e1d75d85e3aaf4d6840e98fa8eaa4839bd2659098ef3e04840cf6e80692bbf3cad480f2454429967f7e7e1e728883562555ae81
6
+ metadata.gz: 204052b9659c971b75293272467b192a7026d7284a74ee91a971f4e0147fcce6144d5d831caca2e62f61c4a3611612e24119c73b6ecb126f2e7b16950eb737b1
7
+ data.tar.gz: e91a0333a881eab6272d99c151d469cf9ee2c88098a83e488c58217a71e9d9ada6fab25c813926f9d3d3e0ab313d9900a5e7d07ba332ae5732237965681bae10
data/VERSION CHANGED
@@ -1 +1 @@
1
- 5.0.0.pre4
1
+ 5.0.0
@@ -5,25 +5,35 @@
5
5
  #
6
6
  module Blacklight::BlacklightHelperBehavior
7
7
  include BlacklightUrlHelper
8
+ include BlacklightConfigurationHelper
8
9
  include HashAsHiddenFieldsHelper
9
10
  include RenderConstraintsHelper
10
11
  include FacetsHelper
11
12
 
13
+ ##
14
+ # Get the name of this application, from either:
15
+ # - the Rails configuration
16
+ # - an i18n string (key: blacklight.application_name; preferred)
17
+ #
18
+ # @return [String] the application named
12
19
  def application_name
13
20
  return Rails.application.config.application_name if Rails.application.config.respond_to? :application_name
14
21
 
15
22
  t('blacklight.application_name')
16
23
  end
17
24
 
25
+ ##
18
26
  # Create <link rel="alternate"> links from a documents dynamically
19
27
  # provided export formats. Currently not used by standard BL layouts,
20
28
  # but available for your custom layouts to provide link rel alternates.
21
29
  #
22
30
  # Returns empty string if no links available.
23
31
  #
24
- # :unique => true, will ensure only one link is output for every
25
- # content type, as required eg in atom. Which one 'wins' is arbitrary.
26
- # :exclude => array of format shortnames, formats to not include at all.
32
+ # @params [SolrDocument] document
33
+ # @params [Hash] options
34
+ # @option options [Boolean] :unique ensures only one link is output for every
35
+ # content type, e.g. as required by atom
36
+ # @option options [Array<String>] :exclude array of format shortnames to not include in the output
27
37
  def render_link_rel_alternates(document=@document, options = {})
28
38
  options = {:unique => false, :exclude => []}.merge(options)
29
39
 
@@ -44,28 +54,43 @@ module Blacklight::BlacklightHelperBehavior
44
54
  return html.html_safe
45
55
  end
46
56
 
57
+ ##
58
+ # Render OpenSearch headers for this search
59
+ # @return [String]
47
60
  def render_opensearch_response_metadata
48
61
  render :partial => 'catalog/opensearch_response_metadata'
49
62
  end
50
63
 
64
+ ##
65
+ # Render classes for the <body> element
66
+ # @return [String]
51
67
  def render_body_class
52
68
  extra_body_classes.join " "
53
69
  end
54
70
 
55
- def render_search_bar
56
- render :partial=>'catalog/search_form'
57
- end
58
-
71
+ ##
72
+ # List of classes to be applied to the <body> element
73
+ # @see render_body_class
74
+ # @return [Array<String>]
59
75
  def extra_body_classes
60
76
  @extra_body_classes ||= ['blacklight-' + controller.controller_name, 'blacklight-' + [controller.controller_name, controller.action_name].join('-')]
61
77
  end
62
78
 
63
- def render_document_list_partial options={}
64
- render :partial=>'catalog/document_list'
79
+ ##
80
+ # Render the search navbar
81
+ # @return [String]
82
+ def render_search_bar
83
+ render :partial=>'catalog/search_form'
65
84
  end
66
85
 
67
- # Save function area for search results 'index' view, normally
68
- # renders next to title.
86
+ ##
87
+ # Render "docuemnt actions" area for search results view
88
+ # (normally renders next to title in the list view)
89
+ #
90
+ # @param [SolrDocument] document
91
+ # @param [Hash] options
92
+ # @option options [String] :wrapping_class
93
+ # @return [String]
69
94
  def render_index_doc_actions(document, options={})
70
95
  wrapping_class = options.delete(:wrapping_class) || "index-document-functions"
71
96
 
@@ -75,12 +100,18 @@ module Blacklight::BlacklightHelperBehavior
75
100
  content_tag("div", safe_join(content, "\n"), :class=> wrapping_class)
76
101
  end
77
102
 
78
- # Save function area for item detail 'show' view, normally
79
- # renders next to title. By default includes 'Bookmarks'
103
+ ##
104
+ # Render "docuemnt actions" for the item detail 'show' view.
105
+ # (this normally renders next to title)
106
+ #
107
+ # By default includes 'Bookmarks'
108
+ #
109
+ # @param [SolrDocument] document
110
+ # @param [Hash] options
111
+ # @option options [String] :wrapping_class
112
+ # @return [String]
80
113
  def render_show_doc_actions(document=@document, options={})
81
- # I'm not sure why this key is documentFunctions and #render_index_doc_actions uses wrapping_class.
82
- # TODO: remove documentFunctions key in Blacklight 5.x
83
- wrapping_class = options.delete(:documentFunctions) || options.delete(:wrapping_class) || "documentFunctions"
114
+ wrapping_class = options.delete(:wrapping_class) || "documentFunctions"
84
115
 
85
116
  content = []
86
117
  content << render(:partial => 'catalog/bookmark_control', :locals => {:document=> document}.merge(options)) if render_bookmarks_control?
@@ -89,17 +120,34 @@ module Blacklight::BlacklightHelperBehavior
89
120
  end
90
121
 
91
122
  ##
92
- # Index fields to display for a type of document
93
- def index_fields document=nil
94
- blacklight_config.index_fields
123
+ # Determine whether to render a given field in the index view.
124
+ #
125
+ # @param [SolrDocument] document
126
+ # @param [Blacklight::Solr::Configuration::SolrField] solr_field
127
+ # @return [Boolean]
128
+ def should_render_index_field? document, solr_field
129
+ document.has?(solr_field.field) ||
130
+ (document.has_highlight_field? solr_field.field if solr_field.highlight) ||
131
+ solr_field.accessor
95
132
  end
96
133
 
97
- def should_render_index_field? document, solr_field
134
+ ##
135
+ # Determine whether to render a given field in the show view
136
+ #
137
+ # @param [SolrDocument] document
138
+ # @param [Blacklight::Solr::Configuration::SolrField] solr_field
139
+ # @return [Boolean]
140
+ def should_render_show_field? document, solr_field
98
141
  document.has?(solr_field.field) ||
99
142
  (document.has_highlight_field? solr_field.field if solr_field.highlight) ||
100
143
  solr_field.accessor
101
144
  end
102
145
 
146
+ ##
147
+ # Determine whether to display spellcheck suggestions
148
+ #
149
+ # @param [Blacklight::SolrResponse] response
150
+ # @return [Boolean]
103
151
  def should_show_spellcheck_suggestions? response
104
152
  response.total <= spell_check_max and response.spelling.words.size > 0
105
153
  end
@@ -156,69 +204,9 @@ module Blacklight::BlacklightHelperBehavior
156
204
  field_config = index_fields(document)[field]
157
205
  value = options[:value] || get_field_values(document, field, field_config, options)
158
206
 
159
-
160
207
  render_field_value value, field_config
161
208
  end
162
209
 
163
- # Used in the show view for displaying the main solr document heading
164
- def document_heading document=nil
165
- document ||= @document
166
- render_field_value document[blacklight_config.view_config(:show).title_field] || document.id
167
- end
168
-
169
- # Used in the show view for setting the main html document title
170
- def document_show_html_title document=nil
171
- document ||= @document
172
-
173
- if blacklight_config.view_config(:show).html_title_field
174
- render_field_value(document[blacklight_config.view_config(:show).html_title_field])
175
- else
176
- document_heading document
177
- end
178
- end
179
-
180
- ##
181
- # Render the document "heading" (title) in a content tag
182
- # @overload render_document_heading(tag)
183
- # @overload render_document_heading(document, options)
184
- # @params [SolrDocument] document
185
- # @params [Hash] options
186
- # @options options [Symbol] :tag
187
- def render_document_heading(*args)
188
- options = args.extract_options!
189
- if args.first.is_a? SolrDocument
190
- document = args.shift
191
- tag = options[:tag]
192
- else
193
- document = nil
194
- tag = args.first || options[:tag]
195
- end
196
-
197
- tag ||= :h4
198
-
199
- content_tag(tag, render_field_value(document_heading(document)), :itemprop => "name")
200
- end
201
-
202
- # Used in the document_list partial (search view) for building a select element
203
- def sort_fields
204
- blacklight_config.sort_fields.map { |key, x| [x.label, x.key] }
205
- end
206
-
207
- # Used in the document list partial (search view) for creating a link to the document show action
208
- def document_show_link_field document=nil
209
- blacklight_config.view_config(document_index_view_type).title_field.to_sym
210
- end
211
-
212
- # Used in the search form partial for building a select tag
213
- def search_fields
214
- search_field_options_for_select
215
- end
216
-
217
- # used in the catalog/_show/_default partial
218
- def document_show_fields document=nil
219
- blacklight_config.show_fields
220
- end
221
-
222
210
  ##
223
211
  # Render the show field label for a document
224
212
  #
@@ -265,7 +253,6 @@ module Blacklight::BlacklightHelperBehavior
265
253
  # @param [Hash] opts
266
254
  # @options opts [String] :value
267
255
  def render_document_show_field_value *args
268
-
269
256
  options = args.extract_options!
270
257
  document = args.shift || options[:document]
271
258
 
@@ -276,6 +263,56 @@ module Blacklight::BlacklightHelperBehavior
276
263
  render_field_value value, field_config
277
264
  end
278
265
 
266
+ ##
267
+ # Get the value of the document's "title" field, or a placeholder
268
+ # value (if empty)
269
+ #
270
+ # @param [SolrDocument] document
271
+ # @return [String]
272
+ def document_heading document=nil
273
+ document ||= @document
274
+ render_field_value(document[blacklight_config.view_config(:show).title_field] || document.id)
275
+ end
276
+
277
+ ##
278
+ # Get the document's "title" to display in the <title> element.
279
+ # (by default, use the #document_heading)
280
+ #
281
+ # @see #document_heading
282
+ # @param [SolrDocument] document
283
+ # @return [String]
284
+ def document_show_html_title document=nil
285
+ document ||= @document
286
+
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
292
+ end
293
+
294
+ ##
295
+ # Render the document "heading" (title) in a content tag
296
+ # @overload render_document_heading(tag)
297
+ # @overload render_document_heading(document, options)
298
+ # @params [SolrDocument] document
299
+ # @params [Hash] options
300
+ # @options options [Symbol] :tag
301
+ def render_document_heading(*args)
302
+ options = args.extract_options!
303
+ if args.first.is_a? SolrDocument
304
+ document = args.shift
305
+ tag = options[:tag]
306
+ else
307
+ document = nil
308
+ tag = args.first || options[:tag]
309
+ end
310
+
311
+ tag ||= :h4
312
+
313
+ content_tag(tag, render_field_value(document_heading(document)), :itemprop => "name")
314
+ end
315
+
279
316
  ##
280
317
  # Get the value for a document's field, and prepare to render it.
281
318
  # - highlight_field
@@ -287,8 +324,12 @@ module Blacklight::BlacklightHelperBehavior
287
324
  # - link_to_search
288
325
  # TODO : maybe this should be merged with render_field_value, and the ugly signature
289
326
  # simplified by pushing some of this logic into the "model"
327
+ # @param [SolrDocument] document
328
+ # @param [String] field name
329
+ # @param [Blacklight::Solr::Configuration::SolrField] solr field configuration
330
+ # @param [Hash] options additional options to pass to the rendering helpers
290
331
  def get_field_values document, field, field_config, options = {}
291
- # valuyes
332
+ # retrieving values
292
333
  value = case
293
334
  when (field_config and field_config.highlight)
294
335
  # retrieve the document value from the highlighting response
@@ -311,7 +352,7 @@ module Blacklight::BlacklightHelperBehavior
311
352
  document.get(field, :sep => nil) if field
312
353
  end
313
354
 
314
- # rendering
355
+ # rendering values
315
356
  case
316
357
  when (field_config and field_config.helper_method)
317
358
  send(field_config.helper_method, options.merge(:document => document, :field => field, :value => value))
@@ -330,12 +371,12 @@ module Blacklight::BlacklightHelperBehavior
330
371
  end
331
372
  end
332
373
 
333
- def should_render_show_field? document, solr_field
334
- document.has?(solr_field.field) ||
335
- (document.has_highlight_field? solr_field.field if solr_field.highlight) ||
336
- solr_field.accessor
337
- end
338
-
374
+ ##
375
+ # Render a value (or array of values) from a field
376
+ #
377
+ # @param [String] value or list of values to display
378
+ # @param [Blacklight::Solr::Configuration::SolrField] solr field configuration
379
+ # @return [String]
339
380
  def render_field_value value=nil, field_config=nil
340
381
  safe_values = Array(value).collect { |x| x.respond_to?(:force_encoding) ? x.force_encoding("UTF-8") : x }
341
382
 
@@ -346,10 +387,19 @@ module Blacklight::BlacklightHelperBehavior
346
387
  safe_join(safe_values, (field_config.separator if field_config) || field_value_separator)
347
388
  end
348
389
 
390
+ ##
391
+ # Default separator to use in #render_field_value
392
+ #
393
+ # @return [String]
349
394
  def field_value_separator
350
395
  ', '
351
396
  end
352
397
 
398
+ ##
399
+ # Get the current "view type" (and ensure it is a valid type)
400
+ #
401
+ # @param [Hash] the query parameters to check
402
+ # @return [Symbol]
353
403
  def document_index_view_type query_params=params
354
404
  if query_params[:view] and blacklight_config.view.keys.include? query_params[:view].to_sym
355
405
  query_params[:view].to_sym
@@ -358,21 +408,42 @@ module Blacklight::BlacklightHelperBehavior
358
408
  end
359
409
  end
360
410
 
361
- def default_document_index_view_type
362
- blacklight_config.view.keys.first
363
- end
364
-
411
+ ##
412
+ # Render the document index view
413
+ #
414
+ # @param [Array<SolrDocument>] list of documents to render
415
+ # @param [Hash] locals to pass to the render call
416
+ # @return [String]
365
417
  def render_document_index documents = nil, locals = {}
366
418
  documents ||= @document_list
367
419
  render_document_index_with_view(document_index_view_type, documents)
368
420
  end
369
421
 
422
+ ##
423
+ # Render the document index for a grouped response
424
+ def render_grouped_document_index
425
+ render :partial => 'catalog/group_default'
426
+ end
427
+
428
+ ##
429
+ # Render the document index for the given view type with the
430
+ # list of documents.
431
+ #
432
+ # This method will interpolate the list of templates with
433
+ # the current view, and gracefully handles missing templates.
434
+ #
435
+ # @see #document_index_path_templates
436
+ #
437
+ # @param [String] view type
438
+ # @param [Array<SolrDocument>] list of documents to render
439
+ # @param [Hash] locals to pass to the render call
440
+ # @return [String]
370
441
  def render_document_index_with_view view, documents, locals = {}
371
442
  document_index_path_templates.each do |str|
372
443
  # XXX rather than handling this logic through exceptions, maybe there's a Rails internals method
373
444
  # for determining if a partial template exists..
374
445
  begin
375
- return render(:partial => (str % { :index_view_type => view }), :locals => { :documents => documents })
446
+ return render(:partial => (str % { :index_view_type => view }), :locals => locals.merge(:documents => documents) )
376
447
  rescue ActionView::MissingTemplate
377
448
  nil
378
449
  end
@@ -381,7 +452,11 @@ module Blacklight::BlacklightHelperBehavior
381
452
  return ""
382
453
  end
383
454
 
384
- # a list of document partial templates to try to render for #render_document_index
455
+ ##
456
+ # A list of document partial templates to attempt to render
457
+ #
458
+ # @see #render_document_index_with_view
459
+ # @return [Array<String>]
385
460
  def document_index_path_templates
386
461
  # first, the legacy template names for backwards compatbility
387
462
  # followed by the new, inheritable style
@@ -389,37 +464,53 @@ module Blacklight::BlacklightHelperBehavior
389
464
  @document_index_path_templates ||= ["document_%{index_view_type}", "catalog/document_%{index_view_type}", "catalog/document_list"]
390
465
  end
391
466
 
392
- # Return a normalized partial name that can be used to contruct view partial path
467
+ ##
468
+ # Return a normalized partial name for rendering a single document
469
+ #
470
+ # @param [SolrDocument]
471
+ # @return [String]
393
472
  def document_partial_name(document)
394
- # .to_s is necessary otherwise the default return value is not always a string
395
- # using "_" as sep. to more closely follow the views file naming conventions
396
- # parameterize uses "-" as the default sep. which throws errors
397
473
  display_type = document[blacklight_config.view_config(:show).display_type_field]
398
474
 
399
475
  return 'default' unless display_type
400
476
  display_type = display_type.join(" ") if display_type.respond_to?(:join)
401
477
 
478
+ # .to_s is necessary otherwise the default return value is not always a string
479
+ # using "_" as sep. to more closely follow the views file naming conventions
480
+ # parameterize uses "-" as the default sep. which throws errors
402
481
  "#{display_type.gsub("-"," ")}".parameterize("_").to_s
403
482
  end
404
483
 
405
- def render_document_partials(doc, actions = [], locals ={})
406
- safe_join(actions.map do |action_name|
484
+ ##
485
+ # Return the list of partials for a given solr document
486
+ # @param [SolrDocument]
487
+ # @return [String]
488
+ def render_document_partials(doc, partials = [], locals ={})
489
+ safe_join(partials.map do |action_name|
407
490
  render_document_partial(doc, action_name, locals)
408
491
  end, "\n")
409
492
  end
410
493
 
411
- # given a doc and action_name, this method attempts to render a partial template
412
- # based on the value of doc[:format]
413
- # if this value is blank (nil/empty) the "default" is used
414
- # if the partial is not found, the "default" partial is rendered instead
415
- def render_document_partial(doc, action_name, locals = {})
494
+ ##
495
+ # Given a doc and a base name for a partial, this method will attempt to render
496
+ # an appropriate partial based on the document format and view type.
497
+ #
498
+ # If a partial that matches the document format is not found,
499
+ # render a default partial for the base name.
500
+ #
501
+ # @see #document_partial_path_templates
502
+ #
503
+ # @param [SolrDocument] doc
504
+ # @param [String] base name for the partial
505
+ # @param [Hash] locales to pass through to the partials
506
+ def render_document_partial(doc, base_name, locals = {})
416
507
  format = document_partial_name(doc)
417
508
 
418
509
  document_partial_path_templates.each do |str|
419
510
  # XXX rather than handling this logic through exceptions, maybe there's a Rails internals method
420
511
  # for determining if a partial template exists..
421
512
  begin
422
- return render :partial => (str % { :action_name => action_name, :format => format, :index_view_type => document_index_view_type }), :locals=>locals.merge({:document=>doc})
513
+ return render :partial => (str % { :action_name => base_name, :format => format, :index_view_type => document_index_view_type }), :locals=>locals.merge(:document=>doc)
423
514
  rescue ActionView::MissingTemplate
424
515
  nil
425
516
  end
@@ -428,7 +519,15 @@ module Blacklight::BlacklightHelperBehavior
428
519
  return ''
429
520
  end
430
521
 
431
- # a list of document partial templates to try to render for #render_document_partial
522
+ ##
523
+ # A list of document partial templates to try to render for a document
524
+ #
525
+ # The partial names will be interpolated with the following variables:
526
+ # - action_name: (e.g. index, show)
527
+ # - index_view_type: (the current view type, e.g. list, gallery)
528
+ # - format: the document's format (e.g. book)
529
+ #
530
+ # @see #render_document_partial
432
531
  def document_partial_path_templates
433
532
  # first, the legacy template names for backwards compatbility
434
533
  # followed by the new, inheritable style
@@ -436,9 +535,15 @@ module Blacklight::BlacklightHelperBehavior
436
535
  @partial_path_templates ||= ["%{action_name}_%{index_view_type}_%{format}", "%{action_name}_%{index_view_type}_default", "%{action_name}_%{format}", "%{action_name}_default", "catalog/%{action_name}_%{format}", "catalog/_%{action_name}_partials/%{format}", "catalog/_%{action_name}_partials/default"]
437
536
  end
438
537
 
439
-
440
-
441
- def render_document_index_label doc, opts
538
+ ##
539
+ # Render the document index heading
540
+ #
541
+ # @param [SolrDocument] doc
542
+ # @param [Hash] opts
543
+ # @option opts [Symbol] :label Render the given field from the document
544
+ # @option opts [Proc] :label Evaluate the given proc
545
+ # @option opts [String] :label Render the given string
546
+ def render_document_index_label doc, opts = {}
442
547
  label = nil
443
548
  label ||= doc.get(opts[:label], :sep => nil) if opts[:label].instance_of? Symbol
444
549
  label ||= opts[:label].call(doc, opts) if opts[:label].instance_of? Proc
@@ -447,10 +552,15 @@ module Blacklight::BlacklightHelperBehavior
447
552
  render_field_value label
448
553
  end
449
554
 
450
- # Use case, you want to render an html partial from an XML (say, atom)
451
- # template. Rails API kind of lets us down, we need to hack Rails internals
452
- # a bit. code taken from:
555
+ ##
556
+ # Render a partial of an arbitrary format inside a
557
+ # template of a different format. (e.g. render an HTML
558
+ # partial from an XML template)
559
+ # code taken from:
453
560
  # http://stackoverflow.com/questions/339130/how-do-i-render-a-partial-of-a-different-format-in-rails (zgchurch)
561
+ #
562
+ # @param [String] format suffix
563
+ # @yield
454
564
  def with_format(format, &block)
455
565
  old_formats = formats
456
566
  self.formats = [format]
@@ -467,17 +577,9 @@ module Blacklight::BlacklightHelperBehavior
467
577
  end
468
578
 
469
579
  ##
470
- # Render the grouped response
471
- def render_grouped_document_index grouped_key = nil
472
- render :partial => 'catalog/group_default'
473
- end
474
-
580
+ # Determine whether to render the bookmarks control
475
581
  def render_bookmarks_control?
476
582
  has_user_authentication_provider? and current_or_guest_user.present?
477
583
  end
478
584
 
479
- def spell_check_max
480
- blacklight_config.spell_max
481
- end
482
-
483
585
  end