mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Add :concat option to asset tag helpers to force concatenation.
This is useful for working around IE's stylesheet limit. stylesheet_link_tag :all, :concat => true
This commit is contained in:
parent
b56169c262
commit
c50b03b754
2 changed files with 48 additions and 6 deletions
|
@ -272,14 +272,17 @@ module ActionView
|
|||
# javascript_include_tag :all, :cache => true, :recursive => true
|
||||
def javascript_include_tag(*sources)
|
||||
options = sources.extract_options!.stringify_keys
|
||||
cache = options.delete("cache")
|
||||
concat = options.delete("concat")
|
||||
cache = concat || options.delete("cache")
|
||||
recursive = options.delete("recursive")
|
||||
|
||||
if ActionController::Base.perform_caching && cache
|
||||
if concat || (ActionController::Base.perform_caching && cache)
|
||||
joined_javascript_name = (cache == true ? "all" : cache) + ".js"
|
||||
joined_javascript_path = File.join(joined_javascript_name[/^#{File::SEPARATOR}/] ? ASSETS_DIR : JAVASCRIPTS_DIR, joined_javascript_name)
|
||||
|
||||
write_asset_file_contents(joined_javascript_path, compute_javascript_paths(sources, recursive)) unless File.exists?(joined_javascript_path)
|
||||
unless ActionController::Base.perform_caching && File.exists?(joined_javascript_path)
|
||||
write_asset_file_contents(joined_javascript_path, compute_javascript_paths(sources, recursive))
|
||||
end
|
||||
javascript_src_tag(joined_javascript_name, options)
|
||||
else
|
||||
expand_javascript_sources(sources, recursive).collect { |source| javascript_src_tag(source, options) }.join("\n")
|
||||
|
@ -410,16 +413,25 @@ module ActionView
|
|||
# The <tt>:recursive</tt> option is also available for caching:
|
||||
#
|
||||
# stylesheet_link_tag :all, :cache => true, :recursive => true
|
||||
#
|
||||
# To force concatenation (even in development mode) set <tt>:concat</tt> to true. This is useful if
|
||||
# you have too many stylesheets for IE to load.
|
||||
#
|
||||
# stylesheet_link_tag :all, :concat => true
|
||||
#
|
||||
def stylesheet_link_tag(*sources)
|
||||
options = sources.extract_options!.stringify_keys
|
||||
cache = options.delete("cache")
|
||||
concat = options.delete("concat")
|
||||
cache = concat || options.delete("cache")
|
||||
recursive = options.delete("recursive")
|
||||
|
||||
if ActionController::Base.perform_caching && cache
|
||||
if concat || (ActionController::Base.perform_caching && cache)
|
||||
joined_stylesheet_name = (cache == true ? "all" : cache) + ".css"
|
||||
joined_stylesheet_path = File.join(joined_stylesheet_name[/^#{File::SEPARATOR}/] ? ASSETS_DIR : STYLESHEETS_DIR, joined_stylesheet_name)
|
||||
|
||||
write_asset_file_contents(joined_stylesheet_path, compute_stylesheet_paths(sources, recursive)) unless File.exists?(joined_stylesheet_path)
|
||||
unless ActionController::Base.perform_caching && File.exists?(joined_stylesheet_path)
|
||||
write_asset_file_contents(joined_stylesheet_path, compute_stylesheet_paths(sources, recursive))
|
||||
end
|
||||
stylesheet_tag(joined_stylesheet_name, options)
|
||||
else
|
||||
expand_stylesheet_sources(sources, recursive).collect { |source| stylesheet_tag(source, options) }.join("\n")
|
||||
|
|
|
@ -568,6 +568,36 @@ class AssetTagHelperTest < ActionView::TestCase
|
|||
FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::ASSETS_DIR, 'absolute'))
|
||||
end
|
||||
|
||||
def test_concat_stylesheet_link_tag_when_caching_off
|
||||
ENV["RAILS_ASSET_ID"] = ""
|
||||
|
||||
assert_dom_equal(
|
||||
%(<link href="/stylesheets/all.css" media="screen" rel="stylesheet" type="text/css" />),
|
||||
stylesheet_link_tag(:all, :concat => true)
|
||||
)
|
||||
|
||||
expected = Dir["#{ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR}/*.css"].map { |p| File.mtime(p) }.max
|
||||
assert_equal expected, File.mtime(File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR, 'all.css'))
|
||||
|
||||
assert_dom_equal(
|
||||
%(<link href="/stylesheets/money.css" media="screen" rel="stylesheet" type="text/css" />),
|
||||
stylesheet_link_tag(:all, :concat => "money")
|
||||
)
|
||||
|
||||
assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR, 'money.css'))
|
||||
|
||||
assert_dom_equal(
|
||||
%(<link href="/absolute/test.css" media="screen" rel="stylesheet" type="text/css" />),
|
||||
stylesheet_link_tag(:all, :concat => "/absolute/test")
|
||||
)
|
||||
|
||||
assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::ASSETS_DIR, 'absolute', 'test.css'))
|
||||
ensure
|
||||
FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR, 'all.css'))
|
||||
FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR, 'money.css'))
|
||||
FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::ASSETS_DIR, 'absolute'))
|
||||
end
|
||||
|
||||
def test_caching_stylesheet_link_tag_when_caching_on_with_proc_asset_host
|
||||
ENV["RAILS_ASSET_ID"] = ""
|
||||
ActionController::Base.asset_host = Proc.new { |source| "http://a#{source.length}.example.com" }
|
||||
|
|
Loading…
Reference in a new issue