Restores support for :plugin support to stylesheet_link_tag and javascript_include_tag helpers.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9558 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2012-04-28 09:10:46 +00:00
parent f12942ff40
commit 03335d014c
5 changed files with 57 additions and 22 deletions

View File

@ -1045,6 +1045,45 @@ module ApplicationHelper
end end
end end
# Overrides Rails' stylesheet_link_tag with themes and plugins support.
# Examples:
# stylesheet_link_tag('styles') # => picks styles.css from the current theme or defaults
# stylesheet_link_tag('styles', :plugin => 'foo) # => picks styles.css from plugin's assets
#
def stylesheet_link_tag(*sources)
options = sources.last.is_a?(Hash) ? sources.pop : {}
plugin = options.delete(:plugin)
sources = sources.map do |source|
if plugin
"/plugin_assets/#{plugin}/stylesheets/#{source}"
elsif current_theme && current_theme.stylesheets.include?(source)
current_theme.stylesheet_path(source)
else
source
end
end
super sources, options
end
# Overrides Rails' javascript_include_tag with plugins support
# Examples:
# javascript_include_tag('scripts') # => picks scripts.js from defaults
# javascript_include_tag('scripts', :plugin => 'foo) # => picks scripts.js from plugin's assets
#
def javascript_include_tag(*sources)
options = sources.last.is_a?(Hash) ? sources.pop : {}
if plugin = options.delete(:plugin)
sources = sources.map do |source|
if plugin
"/plugin_assets/#{plugin}/javascripts/#{source}"
else
source
end
end
end
super sources, options
end
def content_for(name, content = nil, &block) def content_for(name, content = nil, &block)
@has_content ||= {} @has_content ||= {}
@has_content[name] = true @has_content[name] = true

View File

@ -3,5 +3,5 @@
<p class="icon icon-example-works"><%= l(:text_say_goodbye) %></p> <p class="icon icon-example-works"><%= l(:text_say_goodbye) %></p>
<% content_for :header_tags do %> <% content_for :header_tags do %>
<%= stylesheet_link_tag "/plugin_assets/sample_plugin/stylesheets/example.css", :media => "screen" %> <%= stylesheet_link_tag 'example', :plugin => 'sample_plugin', :media => "screen" %>
<% end %> <% end %>

View File

@ -11,5 +11,5 @@
<% end %> <% end %>
<% content_for :header_tags do %> <% content_for :header_tags do %>
<%= stylesheet_link_tag "/plugin_assets/sample_plugin/stylesheets/example.css", :media => "screen" %> <%= stylesheet_link_tag 'example', :plugin => 'sample_plugin', :media => "screen" %>
<% end %> <% end %>

View File

@ -106,26 +106,6 @@ module ApplicationHelper
@current_theme @current_theme
end end
def stylesheet_path(source)
if current_theme && current_theme.stylesheets.include?(source)
super current_theme.stylesheet_path(source)
else
super
end
end
def path_to_stylesheet(source)
stylesheet_path source
end
def stylesheet_link_tag(source, *args)
if current_theme && current_theme.stylesheets.include?(source)
super current_theme.stylesheet_path(source), *args
else
super
end
end
# Returns the header tags for the current theme # Returns the header tags for the current theme
def heads_for_theme def heads_for_theme
if current_theme && current_theme.javascripts.include?('theme') if current_theme && current_theme.javascripts.include?('theme')

View File

@ -1045,4 +1045,20 @@ RAW
User.current = User.find(4) User.current = User.find(4)
assert_include '<option value="4"><< me >></option>', principals_options_for_select(users) assert_include '<option value="4"><< me >></option>', principals_options_for_select(users)
end end
def test_stylesheet_link_tag_should_pick_the_default_stylesheet
assert_match 'href="/stylesheets/styles.css"', stylesheet_link_tag("styles")
end
def test_stylesheet_link_tag_for_plugin_should_pick_the_plugin_stylesheet
assert_match 'href="/plugin_assets/foo/stylesheets/styles.css"', stylesheet_link_tag("styles", :plugin => :foo)
end
def test_javascript_include_tag_should_pick_the_default_javascript
assert_match 'src="/javascripts/scripts.js"', javascript_include_tag("scripts")
end
def test_javascript_include_tag_for_plugin_should_pick_the_plugin_javascript
assert_match 'src="/plugin_assets/foo/javascripts/scripts.js"', javascript_include_tag("scripts", :plugin => :foo)
end
end end