Permalink
Browse files

refactored the javascript asset tag helpers and moved the default scr…

…ipts setup within the railtie

Signed-off-by: José Valim <jose.valim@gmail.com>
  • Loading branch information...
joshk authored and josevalim committed Jun 22, 2010
1 parent a6eeb08 commit 97b773303d1fd3c585957b9d4d2bf9485664f892
@@ -194,7 +194,6 @@ module Helpers #:nodoc:
# RewriteEngine On
# RewriteRule ^/release-\d+/(images|javascripts|stylesheets)/(.*)$ /$1/$2 [L]
module AssetTagHelper
- JAVASCRIPT_DEFAULT_SOURCES = ['prototype', 'effects', 'dragdrop', 'controls', 'rails'].freeze
# Returns a link tag that browsers and news readers can use to auto-detect
# an RSS or ATOM feed. The +type+ can either be <tt>:rss</tt> (default) or
@@ -351,7 +350,7 @@ def javascript_include_tag(*sources)
end
end
- @@javascript_expansions = { :defaults => JAVASCRIPT_DEFAULT_SOURCES.dup }
+ @@javascript_expansions = { }
# Register one or more javascript files to be included when <tt>symbol</tt>
# is passed to <tt>javascript_include_tag</tt>. This method is typically intended
@@ -368,6 +367,10 @@ def self.register_javascript_expansion(expansions)
@@javascript_expansions.merge!(expansions)
end
+ def self.reset_javascript_expansions #:nodoc:
+ @@javascript_expansions = {}
+ end
+
@@stylesheet_expansions = {}
# Register one or more stylesheet files to be included when <tt>symbol</tt>
@@ -385,18 +388,6 @@ def self.register_stylesheet_expansion(expansions)
@@stylesheet_expansions.merge!(expansions)
end
- # Register one or more additional JavaScript files to be included when
- # <tt>javascript_include_tag :defaults</tt> is called. This method is
- # typically intended to be called from plugin initialization to register additional
- # .js files that the plugin installed in <tt>public/javascripts</tt>.
- def self.register_javascript_include_default(*sources)
- @@javascript_expansions[:defaults].concat(sources)
- end
-
- def self.reset_javascript_include_default #:nodoc:
- @@javascript_expansions[:defaults] = JAVASCRIPT_DEFAULT_SOURCES.dup
- end
-
# Computes the path to a stylesheet asset in the public stylesheets directory.
# If the +source+ filename has no extension, <tt>.css</tt> will be appended (except for explicit URIs).
# Full paths from the document root will be passed through.
@@ -6,6 +6,9 @@ module ActionView
class Railtie < Rails::Railtie
config.action_view = ActiveSupport::OrderedOptions.new
+ # setup default js includes
+ config.action_view.javascript_expansions = { :defaults => ['prototype', 'effects', 'dragdrop', 'controls', 'rails'] }
+
require "action_view/railties/log_subscriber"
log_subscriber :action_view, ActionView::Railties::LogSubscriber.new
@@ -17,6 +20,12 @@ class Railtie < Rails::Railtie
end
end
+ initializer "action_view.javascript_expansions" do |app|
+ ActiveSupport.on_load(:action_view) do
+ ActionView::Helpers::AssetTagHelper.register_javascript_expansion(app.config.action_view.javascript_expansions)
+ end
+ end
+
initializer "action_view.set_configs" do |app|
ActiveSupport.on_load(:action_view) do
app.config.action_view.each do |k,v|
@@ -44,7 +44,7 @@ def host_with_port() 'localhost' end
@controller.request = @request
- ActionView::Helpers::AssetTagHelper::reset_javascript_include_default
+ ActionView::Helpers::AssetTagHelper::register_javascript_expansion :defaults => ['prototype', 'effects', 'dragdrop', 'controls', 'rails']
end
def url_for(*args)
@@ -256,19 +256,6 @@ def test_javascript_include_tag_is_html_safe
assert javascript_include_tag("prototype").html_safe?
end
- def test_register_javascript_include_default
- ENV["RAILS_ASSET_ID"] = ""
- ActionView::Helpers::AssetTagHelper::register_javascript_include_default 'bank'
- assert_dom_equal %(<script src="/javascripts/prototype.js" type="text/javascript"></script>\n<script src="/javascripts/effects.js" type="text/javascript"></script>\n<script src="/javascripts/dragdrop.js" type="text/javascript"></script>\n<script src="/javascripts/controls.js" type="text/javascript"></script>\n<script src="/javascripts/rails.js" type="text/javascript"></script>\n<script src="/javascripts/bank.js" type="text/javascript"></script>\n<script src="/javascripts/application.js" type="text/javascript"></script>), javascript_include_tag(:defaults)
- end
-
- def test_register_javascript_include_default_mixed_defaults
- ENV["RAILS_ASSET_ID"] = ""
- ActionView::Helpers::AssetTagHelper::register_javascript_include_default 'bank'
- ActionView::Helpers::AssetTagHelper::register_javascript_include_default 'robber', '/elsewhere/cools.js'
- assert_dom_equal %(<script src="/javascripts/prototype.js" type="text/javascript"></script>\n<script src="/javascripts/effects.js" type="text/javascript"></script>\n<script src="/javascripts/dragdrop.js" type="text/javascript"></script>\n<script src="/javascripts/controls.js" type="text/javascript"></script>\n<script src="/javascripts/rails.js" type="text/javascript"></script>\n<script src="/javascripts/bank.js" type="text/javascript"></script>\n<script src="/javascripts/robber.js" type="text/javascript"></script>\n<script src="/elsewhere/cools.js" type="text/javascript"></script>\n<script src="/javascripts/application.js" type="text/javascript"></script>), javascript_include_tag(:defaults)
- end
-
def test_custom_javascript_expansions
ENV["RAILS_ASSET_ID"] = ""
ActionView::Helpers::AssetTagHelper::register_javascript_expansion :robbery => ["bank", "robber"]
@@ -286,6 +273,11 @@ def test_custom_javascript_expansions_with_undefined_symbol
assert_raise(ArgumentError) { javascript_include_tag('first', :monkey, 'last') }
end
+ def test_reset_javascript_expansions
+ ActionView::Helpers::AssetTagHelper::reset_javascript_expansions
+ assert_raise(ArgumentError) { javascript_include_tag(:defaults) }
+ end
+
def test_stylesheet_path
ENV["RAILS_ASSET_ID"] = ""
StylePathToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) }
@@ -923,7 +915,7 @@ def setup
@request = Struct.new(:protocol).new("gopher://")
@controller.request = @request
- ActionView::Helpers::AssetTagHelper::reset_javascript_include_default
+ ActionView::Helpers::AssetTagHelper::reset_javascript_expansions
end
def url_for(options)

0 comments on commit 97b7733

Please sign in to comment.