blacklight 3.0.0 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/app/helpers/blacklight_helper.rb +2 -215
- data/app/helpers/facets_helper.rb +114 -0
- data/app/helpers/html_head_helper.rb +103 -0
- data/app/views/catalog/_document.html.erb +0 -2
- data/app/views/catalog/show.html.erb +0 -1
- data/app/views/kaminari/blacklight/_paginator.html.erb +1 -1
- data/lib/blacklight.rb +1 -0
- data/lib/blacklight/catalog.rb +0 -22
- data/lib/blacklight/kaminari_relevant_pages_patch.rb +37 -0
- data/lib/blacklight/routes.rb +0 -1
- data/lib/blacklight/solr/document.rb +3 -3
- data/lib/blacklight/solr_helper.rb +2 -2
- data/lib/generators/blacklight/assets_generator.rb +1 -1
- data/lib/generators/blacklight/templates/config/blacklight_config.rb +7 -13
- data/lib/railties/blacklight_rspec.rake +3 -1
- data/test_support/bin/run-tests.sh +64 -0
- data/test_support/bin/test.sh +12 -4
- data/test_support/features/step_definitions/search_steps.rb +0 -4
- data/test_support/features/support/paths.rb +0 -9
- data/test_support/spec/controllers/catalog_controller_spec.rb +0 -45
- data/test_support/spec/helpers/blacklight_helper_spec.rb +2 -174
- data/test_support/spec/helpers/facets_helper_spec.rb +100 -0
- data/test_support/spec/helpers/html_head_helper_spec.rb +90 -0
- data/test_support/spec/helpers/solr_helper_spec.rb +1 -1
- metadata +85 -120
- data/app/views/catalog/_unapi_microformat.html.erb +0 -1
- data/app/views/catalog/unapi.xml.builder +0 -6
- data/test_support/features/unapi.feature +0 -30
- data/test_support/spec/views/catalog/unapi.xml.builder_spec.rb +0 -46
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.
|
1
|
+
3.1.0
|
@@ -6,111 +6,14 @@
|
|
6
6
|
module BlacklightHelper
|
7
7
|
include HashAsHiddenFields
|
8
8
|
include RenderConstraintsHelper
|
9
|
+
include HtmlHeadHelper
|
10
|
+
include FacetsHelper
|
9
11
|
|
10
12
|
|
11
13
|
def application_name
|
12
14
|
'Blacklight'
|
13
15
|
end
|
14
16
|
|
15
|
-
##
|
16
|
-
# This method should be included in any Blacklight layout, including
|
17
|
-
# custom ones. It will output results of #render_js_includes,
|
18
|
-
# #render_stylesheet_includes, and all the content of
|
19
|
-
# current_controller#extra_head_content.
|
20
|
-
#
|
21
|
-
# Uses controller methods #extra_head_content, #javascript_includes,
|
22
|
-
# and #stylesheet_links to find content. Tolerates it if those
|
23
|
-
# methods don't exist, silently skipping.
|
24
|
-
#
|
25
|
-
# By a layout outputting this in html HEAD, it provides an easy way for
|
26
|
-
# local config or extra plugins to add HEAD content.
|
27
|
-
#
|
28
|
-
# Add your own css or remove the defaults by simply editing
|
29
|
-
# controller.stylesheet_links, controller.javascript_includes,
|
30
|
-
# or controller.extra_head_content.
|
31
|
-
#
|
32
|
-
#
|
33
|
-
#
|
34
|
-
# in an initializer or other startup file (plugin init.rb?):
|
35
|
-
#
|
36
|
-
# == Apply to all actions in all controllers:
|
37
|
-
#
|
38
|
-
# ApplicationController.before_filter do |controller|
|
39
|
-
# # remove default jquery-ui theme.
|
40
|
-
# controller.stylesheet_links.each do |args|
|
41
|
-
# args.delete_if {|a| a =~ /^|\/jquery-ui-[\d.]+\.custom\.css$/ }
|
42
|
-
# end
|
43
|
-
#
|
44
|
-
# # add in a different jquery-ui theme, or any other css or what have you
|
45
|
-
# controller.stylesheet_links << 'my_css.css'
|
46
|
-
#
|
47
|
-
# controller.javascript_includes << "my_local_behaviors.js"
|
48
|
-
#
|
49
|
-
# controller.extra_head_content << '<link rel="something" href="something">'
|
50
|
-
# end
|
51
|
-
#
|
52
|
-
# == Apply to a particular action in a particular controller:
|
53
|
-
#
|
54
|
-
# CatalogController.before_filter :only => :show |controller|
|
55
|
-
# controller.extra_head_content << '<link rel="something" href="something">'
|
56
|
-
# end
|
57
|
-
#
|
58
|
-
# == Or in a view file that wants to add certain header content? no problem:
|
59
|
-
#
|
60
|
-
# <% stylesheet_links << "mystylesheet.css" %>
|
61
|
-
# <% javascript_includes << "my_js.js" %>
|
62
|
-
# <% extra_head_content << capture do %>
|
63
|
-
# <%= tag :link, { :href => some_method_for_something, :rel => "alternate" } %>
|
64
|
-
# <% end %>
|
65
|
-
#
|
66
|
-
# == Full power of javascript_include_tag and stylesheet_link_tag
|
67
|
-
# Note that the elements added to stylesheet_links and javascript_links
|
68
|
-
# are arguments to Rails javascript_include_tag and stylesheet_link_tag
|
69
|
-
# respectively, you can pass complex arguments. eg:
|
70
|
-
#
|
71
|
-
# stylesheet_links << ["stylesheet1.css", "stylesheet2.css", {:cache => "mykey"}]
|
72
|
-
# javascript_includes << ["myjavascript.js", {:plugin => :myplugin} ]
|
73
|
-
def render_head_content
|
74
|
-
render_stylesheet_includes +
|
75
|
-
render_js_includes +
|
76
|
-
render_extra_head_content
|
77
|
-
end
|
78
|
-
|
79
|
-
##
|
80
|
-
# Assumes controller has a #stylesheet_link_tag method, array with
|
81
|
-
# each element being a set of arguments for stylesheet_link_tag
|
82
|
-
# See #render_head_content for instructions on local code or plugins
|
83
|
-
# adding stylesheets.
|
84
|
-
def render_stylesheet_includes
|
85
|
-
return "".html_safe unless respond_to?(:stylesheet_links)
|
86
|
-
|
87
|
-
stylesheet_links.uniq.collect do |args|
|
88
|
-
stylesheet_link_tag(*args)
|
89
|
-
end.join("\n").html_safe
|
90
|
-
end
|
91
|
-
|
92
|
-
|
93
|
-
##
|
94
|
-
# Assumes controller has a #js_includes method, array with each
|
95
|
-
# element being a set of arguments for javsascript_include_tag.
|
96
|
-
# See #render_head_content for instructions on local code or plugins
|
97
|
-
# adding js files.
|
98
|
-
def render_js_includes
|
99
|
-
return "".html_safe unless respond_to?(:javascript_includes)
|
100
|
-
|
101
|
-
javascript_includes.uniq.collect do |args|
|
102
|
-
javascript_include_tag(*args)
|
103
|
-
end.join("\n").html_safe
|
104
|
-
end
|
105
|
-
|
106
|
-
##
|
107
|
-
# Assumes controller has a #extra_head_content method
|
108
|
-
#
|
109
|
-
def render_extra_head_content
|
110
|
-
return "".html_safe unless respond_to?(:extra_head_content)
|
111
|
-
|
112
|
-
extra_head_content.join("\n").html_safe
|
113
|
-
end
|
114
17
|
|
115
18
|
# Create <link rel="alternate"> links from a documents dynamically
|
116
19
|
# provided export formats. Currently not used by standard BL layouts,
|
@@ -158,27 +61,6 @@ module BlacklightHelper
|
|
158
61
|
@extra_body_classes ||= ['blacklight-' + controller.controller_name, 'blacklight-' + [controller.controller_name, controller.action_name].join('-')]
|
159
62
|
end
|
160
63
|
|
161
|
-
#
|
162
|
-
# Blacklight.config based helpers ->
|
163
|
-
#
|
164
|
-
|
165
|
-
# used in the catalog/_facets partial
|
166
|
-
def facet_field_labels
|
167
|
-
Blacklight.config[:facet][:labels]
|
168
|
-
end
|
169
|
-
|
170
|
-
# used in the catalog/_facets partial
|
171
|
-
def facet_field_names
|
172
|
-
Blacklight.config[:facet][:field_names]
|
173
|
-
end
|
174
|
-
|
175
|
-
# used in the catalog/_facets partial and elsewhere
|
176
|
-
# Renders a single section for facet limit with a specified
|
177
|
-
# solr field used for faceting. Can be over-ridden for custom
|
178
|
-
# display on a per-facet basis.
|
179
|
-
def render_facet_limit(solr_field)
|
180
|
-
render( :partial => "catalog/facet_limit", :locals => {:solr_field =>solr_field })
|
181
|
-
end
|
182
64
|
|
183
65
|
def render_document_list_partial options={}
|
184
66
|
render :partial=>'catalog/document_list'
|
@@ -322,96 +204,6 @@ module BlacklightHelper
|
|
322
204
|
link_to(raw(render_search_to_s(params)), catalog_index_path(params)).html_safe
|
323
205
|
end
|
324
206
|
|
325
|
-
#
|
326
|
-
# facet param helpers ->
|
327
|
-
#
|
328
|
-
|
329
|
-
# Standard display of a facet value in a list. Used in both _facets sidebar
|
330
|
-
# partial and catalog/facet expanded list. Will output facet value name as
|
331
|
-
# a link to add that to your restrictions, with count in parens.
|
332
|
-
# first arg item is a facet value item from rsolr-ext.
|
333
|
-
# options consist of:
|
334
|
-
# :suppress_link => true # do not make it a link, used for an already selected value for instance
|
335
|
-
def render_facet_value(facet_solr_field, item, options ={})
|
336
|
-
(link_to_unless(options[:suppress_link], item.value, add_facet_params_and_redirect(facet_solr_field, item.value), :class=>"facet_select label") + " " + render_facet_count(item.hits)).html_safe
|
337
|
-
end
|
338
|
-
|
339
|
-
# Standard display of a SELECTED facet value, no link, special span
|
340
|
-
# with class, and 'remove' button.
|
341
|
-
def render_selected_facet_value(facet_solr_field, item)
|
342
|
-
content_tag(:span, render_facet_value(facet_solr_field, item, :suppress_link => true), :class => "selected label") +
|
343
|
-
link_to("[remove]", remove_facet_params(facet_solr_field, item.value, params), :class=>"remove")
|
344
|
-
end
|
345
|
-
|
346
|
-
# Renders a count value for facet limits. Can be over-ridden locally
|
347
|
-
# to change style, for instance not use parens. And can be called
|
348
|
-
# by plugins to get consistent display.
|
349
|
-
def render_facet_count(num)
|
350
|
-
content_tag("span", "(" + format_num(num) + ")", :class => "count")
|
351
|
-
end
|
352
|
-
|
353
|
-
# adds the value and/or field to params[:f]
|
354
|
-
# Does NOT remove request keys and otherwise ensure that the hash
|
355
|
-
# is suitable for a redirect. See
|
356
|
-
# add_facet_params_and_redirect
|
357
|
-
def add_facet_params(field, value)
|
358
|
-
p = params.dup
|
359
|
-
p[:f] = (p[:f] || {}).dup # the command above is not deep in rails3, !@#$!@#$
|
360
|
-
p[:f][field] = (p[:f][field] || []).dup
|
361
|
-
p[:f][field].push(value)
|
362
|
-
p
|
363
|
-
end
|
364
|
-
|
365
|
-
# Used in catalog/facet action, facets.rb view, for a click
|
366
|
-
# on a facet value. Add on the facet params to existing
|
367
|
-
# search constraints. Remove any paginator-specific request
|
368
|
-
# params, or other request params that should be removed
|
369
|
-
# for a 'fresh' display.
|
370
|
-
# Change the action to 'index' to send them back to
|
371
|
-
# catalog/index with their new facet choice.
|
372
|
-
def add_facet_params_and_redirect(field, value)
|
373
|
-
new_params = add_facet_params(field, value)
|
374
|
-
|
375
|
-
# Delete page, if needed.
|
376
|
-
new_params.delete(:page)
|
377
|
-
|
378
|
-
# Delete any request params from facet-specific action, needed
|
379
|
-
# to redir to index action properly.
|
380
|
-
Blacklight::Solr::FacetPaginator.request_keys.values.each do |paginator_key|
|
381
|
-
new_params.delete(paginator_key)
|
382
|
-
end
|
383
|
-
new_params.delete(:id)
|
384
|
-
|
385
|
-
# Force action to be index.
|
386
|
-
new_params[:action] = "index"
|
387
|
-
new_params
|
388
|
-
end
|
389
|
-
# copies the current params (or whatever is passed in as the 3rd arg)
|
390
|
-
# removes the field value from params[:f]
|
391
|
-
# removes the field if there are no more values in params[:f][field]
|
392
|
-
# removes additional params (page, id, etc..)
|
393
|
-
def remove_facet_params(field, value, source_params=params)
|
394
|
-
p = source_params.dup
|
395
|
-
# need to dup the facet values too,
|
396
|
-
# if the values aren't dup'd, then the values
|
397
|
-
# from the session will get remove in the show view...
|
398
|
-
p[:f] = p[:f].dup
|
399
|
-
p[:f][field] = p[:f][field].nil? ? [] : p[:f][field].dup
|
400
|
-
p.delete :page
|
401
|
-
p.delete :id
|
402
|
-
p.delete :counter
|
403
|
-
p.delete :commit
|
404
|
-
#return p unless p[field]
|
405
|
-
p[:f][field] = p[:f][field] - [value]
|
406
|
-
p[:f].delete(field) if p[:f][field].size == 0
|
407
|
-
p
|
408
|
-
end
|
409
|
-
|
410
|
-
# true or false, depending on whether the field and value is in params[:f]
|
411
|
-
def facet_in_params?(field, value)
|
412
|
-
params[:f] and params[:f][field] and params[:f][field].include?(value)
|
413
|
-
end
|
414
|
-
|
415
207
|
#
|
416
208
|
# shortcut for built-in Rails helper, "number_with_delimiter"
|
417
209
|
#
|
@@ -602,9 +394,4 @@ module BlacklightHelper
|
|
602
394
|
val
|
603
395
|
end
|
604
396
|
|
605
|
-
|
606
|
-
def render_document_unapi_microformat(document, options={})
|
607
|
-
render(:partial=>'catalog/unapi_microformat', :locals => {:document=> document}.merge(options))
|
608
|
-
end
|
609
|
-
|
610
397
|
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
module FacetsHelper
|
2
|
+
|
3
|
+
#
|
4
|
+
# Blacklight.config based helpers ->
|
5
|
+
#
|
6
|
+
|
7
|
+
# used in the catalog/_facets partial
|
8
|
+
def facet_field_labels
|
9
|
+
Blacklight.config[:facet][:labels]
|
10
|
+
end
|
11
|
+
|
12
|
+
# used in the catalog/_facets partial
|
13
|
+
def facet_field_names
|
14
|
+
Blacklight.config[:facet][:field_names]
|
15
|
+
end
|
16
|
+
|
17
|
+
# used in the catalog/_facets partial and elsewhere
|
18
|
+
# Renders a single section for facet limit with a specified
|
19
|
+
# solr field used for faceting. Can be over-ridden for custom
|
20
|
+
# display on a per-facet basis.
|
21
|
+
def render_facet_limit(solr_field)
|
22
|
+
render( :partial => "catalog/facet_limit", :locals => {:solr_field =>solr_field })
|
23
|
+
end
|
24
|
+
|
25
|
+
#
|
26
|
+
# facet param helpers ->
|
27
|
+
#
|
28
|
+
|
29
|
+
# Standard display of a facet value in a list. Used in both _facets sidebar
|
30
|
+
# partial and catalog/facet expanded list. Will output facet value name as
|
31
|
+
# a link to add that to your restrictions, with count in parens.
|
32
|
+
# first arg item is a facet value item from rsolr-ext.
|
33
|
+
# options consist of:
|
34
|
+
# :suppress_link => true # do not make it a link, used for an already selected value for instance
|
35
|
+
def render_facet_value(facet_solr_field, item, options ={})
|
36
|
+
(link_to_unless(options[:suppress_link], item.value, add_facet_params_and_redirect(facet_solr_field, item.value), :class=>"facet_select label") + " " + render_facet_count(item.hits)).html_safe
|
37
|
+
end
|
38
|
+
|
39
|
+
# Standard display of a SELECTED facet value, no link, special span
|
40
|
+
# with class, and 'remove' button.
|
41
|
+
def render_selected_facet_value(facet_solr_field, item)
|
42
|
+
content_tag(:span, render_facet_value(facet_solr_field, item, :suppress_link => true), :class => "selected label") +
|
43
|
+
link_to("[remove]", remove_facet_params(facet_solr_field, item.value, params), :class=>"remove")
|
44
|
+
end
|
45
|
+
|
46
|
+
# Renders a count value for facet limits. Can be over-ridden locally
|
47
|
+
# to change style, for instance not use parens. And can be called
|
48
|
+
# by plugins to get consistent display.
|
49
|
+
def render_facet_count(num)
|
50
|
+
content_tag("span", "(" + format_num(num) + ")", :class => "count")
|
51
|
+
end
|
52
|
+
|
53
|
+
# adds the value and/or field to params[:f]
|
54
|
+
# Does NOT remove request keys and otherwise ensure that the hash
|
55
|
+
# is suitable for a redirect. See
|
56
|
+
# add_facet_params_and_redirect
|
57
|
+
def add_facet_params(field, value)
|
58
|
+
p = params.dup
|
59
|
+
p[:f] = (p[:f] || {}).dup # the command above is not deep in rails3, !@#$!@#$
|
60
|
+
p[:f][field] = (p[:f][field] || []).dup
|
61
|
+
p[:f][field].push(value)
|
62
|
+
p
|
63
|
+
end
|
64
|
+
|
65
|
+
# Used in catalog/facet action, facets.rb view, for a click
|
66
|
+
# on a facet value. Add on the facet params to existing
|
67
|
+
# search constraints. Remove any paginator-specific request
|
68
|
+
# params, or other request params that should be removed
|
69
|
+
# for a 'fresh' display.
|
70
|
+
# Change the action to 'index' to send them back to
|
71
|
+
# catalog/index with their new facet choice.
|
72
|
+
def add_facet_params_and_redirect(field, value)
|
73
|
+
new_params = add_facet_params(field, value)
|
74
|
+
|
75
|
+
# Delete page, if needed.
|
76
|
+
new_params.delete(:page)
|
77
|
+
|
78
|
+
# Delete any request params from facet-specific action, needed
|
79
|
+
# to redir to index action properly.
|
80
|
+
Blacklight::Solr::FacetPaginator.request_keys.values.each do |paginator_key|
|
81
|
+
new_params.delete(paginator_key)
|
82
|
+
end
|
83
|
+
new_params.delete(:id)
|
84
|
+
|
85
|
+
# Force action to be index.
|
86
|
+
new_params[:action] = "index"
|
87
|
+
new_params
|
88
|
+
end
|
89
|
+
# copies the current params (or whatever is passed in as the 3rd arg)
|
90
|
+
# removes the field value from params[:f]
|
91
|
+
# removes the field if there are no more values in params[:f][field]
|
92
|
+
# removes additional params (page, id, etc..)
|
93
|
+
def remove_facet_params(field, value, source_params=params)
|
94
|
+
p = source_params.dup
|
95
|
+
# need to dup the facet values too,
|
96
|
+
# if the values aren't dup'd, then the values
|
97
|
+
# from the session will get remove in the show view...
|
98
|
+
p[:f] = (p[:f] || {}).dup
|
99
|
+
p[:f][field] = (p[:f][field] || []).dup
|
100
|
+
p.delete :page
|
101
|
+
p.delete :id
|
102
|
+
p.delete :counter
|
103
|
+
p.delete :commit
|
104
|
+
p[:f][field] = p[:f][field] - [value]
|
105
|
+
p[:f].delete(field) if p[:f][field].size == 0
|
106
|
+
p
|
107
|
+
end
|
108
|
+
|
109
|
+
# true or false, depending on whether the field and value is in params[:f]
|
110
|
+
def facet_in_params?(field, value)
|
111
|
+
params[:f] and params[:f][field] and params[:f][field].include?(value)
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
module HtmlHeadHelper
|
2
|
+
##
|
3
|
+
# This method should be included in any Blacklight layout, including
|
4
|
+
# custom ones. It will output results of #render_js_includes,
|
5
|
+
# #render_stylesheet_includes, all the content of
|
6
|
+
# current_controller#extra_head_content as well as any content passed
|
7
|
+
# in any content_for(:head) blocks.
|
8
|
+
#
|
9
|
+
# Uses controller methods #extra_head_content, #javascript_includes,
|
10
|
+
# and #stylesheet_links to find content. Tolerates it if those
|
11
|
+
# methods don't exist, silently skipping.
|
12
|
+
#
|
13
|
+
# By a layout outputting this in html HEAD, it provides an easy way for
|
14
|
+
# local config or extra plugins to add HEAD content.
|
15
|
+
#
|
16
|
+
# Add your own css or remove the defaults by simply editing
|
17
|
+
# controller.stylesheet_links, controller.javascript_includes,
|
18
|
+
# or controller.extra_head_content.
|
19
|
+
#
|
20
|
+
#
|
21
|
+
#
|
22
|
+
# in an initializer or other startup file (plugin init.rb?):
|
23
|
+
#
|
24
|
+
# == Apply to all actions in all controllers:
|
25
|
+
#
|
26
|
+
# ApplicationController.before_filter do |controller|
|
27
|
+
# # remove default jquery-ui theme.
|
28
|
+
# controller.stylesheet_links.each do |args|
|
29
|
+
# args.delete_if {|a| a =~ /^|\/jquery-ui-[\d.]+\.custom\.css$/ }
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# # add in a different jquery-ui theme, or any other css or what have you
|
33
|
+
# controller.stylesheet_links << 'my_css.css'
|
34
|
+
#
|
35
|
+
# controller.javascript_includes << "my_local_behaviors.js"
|
36
|
+
#
|
37
|
+
# controller.extra_head_content << '<link rel="something" href="something">'
|
38
|
+
# end
|
39
|
+
#
|
40
|
+
# == Apply to a particular action in a particular controller:
|
41
|
+
#
|
42
|
+
# CatalogController.before_filter :only => :show |controller|
|
43
|
+
# controller.extra_head_content << '<link rel="something" href="something">'
|
44
|
+
# end
|
45
|
+
#
|
46
|
+
# == Or in a view file that wants to add certain header content? no problem:
|
47
|
+
#
|
48
|
+
# <% stylesheet_links << "mystylesheet.css" %>
|
49
|
+
# <% javascript_includes << "my_js.js" %>
|
50
|
+
# <% extra_head_content << capture do %>
|
51
|
+
# <%= tag :link, { :href => some_method_for_something, :rel => "alternate" } %>
|
52
|
+
# <% end %>
|
53
|
+
#
|
54
|
+
# == Full power of javascript_include_tag and stylesheet_link_tag
|
55
|
+
# Note that the elements added to stylesheet_links and javascript_links
|
56
|
+
# are arguments to Rails javascript_include_tag and stylesheet_link_tag
|
57
|
+
# respectively, you can pass complex arguments. eg:
|
58
|
+
#
|
59
|
+
# stylesheet_links << ["stylesheet1.css", "stylesheet2.css", {:cache => "mykey"}]
|
60
|
+
# javascript_includes << ["myjavascript.js", {:plugin => :myplugin} ]
|
61
|
+
def render_head_content
|
62
|
+
render_stylesheet_includes +
|
63
|
+
render_js_includes +
|
64
|
+
render_extra_head_content +
|
65
|
+
content_for(:head)
|
66
|
+
end
|
67
|
+
|
68
|
+
##
|
69
|
+
# Assumes controller has a #stylesheet_link_tag method, array with
|
70
|
+
# each element being a set of arguments for stylesheet_link_tag
|
71
|
+
# See #render_head_content for instructions on local code or plugins
|
72
|
+
# adding stylesheets.
|
73
|
+
def render_stylesheet_includes
|
74
|
+
return "".html_safe unless respond_to?(:stylesheet_links)
|
75
|
+
|
76
|
+
stylesheet_links.uniq.collect do |args|
|
77
|
+
stylesheet_link_tag(*args)
|
78
|
+
end.join("\n").html_safe
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
##
|
83
|
+
# Assumes controller has a #js_includes method, array with each
|
84
|
+
# element being a set of arguments for javsascript_include_tag.
|
85
|
+
# See #render_head_content for instructions on local code or plugins
|
86
|
+
# adding js files.
|
87
|
+
def render_js_includes
|
88
|
+
return "".html_safe unless respond_to?(:javascript_includes)
|
89
|
+
|
90
|
+
javascript_includes.uniq.collect do |args|
|
91
|
+
javascript_include_tag(*args)
|
92
|
+
end.join("\n").html_safe
|
93
|
+
end
|
94
|
+
|
95
|
+
##
|
96
|
+
# Assumes controller has a #extra_head_content method
|
97
|
+
#
|
98
|
+
def render_extra_head_content
|
99
|
+
return "".html_safe unless respond_to?(:extra_head_content)
|
100
|
+
|
101
|
+
extra_head_content.join("\n").html_safe
|
102
|
+
end
|
103
|
+
end
|