Ticket #10350: custom_asset_expansions.diff
| File custom_asset_expansions.diff, 10.5 kB (added by lotswholetime, 6 months ago) |
|---|
-
test/template/asset_tag_helper_test.rb
old new 83 83 %(javascript_include_tag("common.javascript", "/elsewhere/cools")) => %(<script src="/javascripts/common.javascript" type="text/javascript"></script>\n<script src="/elsewhere/cools.js" type="text/javascript"></script>), 84 84 %(javascript_include_tag(:defaults)) => %(<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/application.js" type="text/javascript"></script>), 85 85 %(javascript_include_tag(:all)) => %(<script src="/javascripts/application.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>), 86 %(javascript_include_tag(:defaults, "test")) => %(<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/ test.js" type="text/javascript"></script>\n<script src="/javascripts/application.js" type="text/javascript"></script>),86 %(javascript_include_tag(:defaults, "test")) => %(<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/application.js" type="text/javascript"></script>\n<script src="/javascripts/test.js" type="text/javascript"></script>), 87 87 %(javascript_include_tag("test", :defaults)) => %(<script src="/javascripts/test.js" type="text/javascript"></script>\n<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/application.js" type="text/javascript"></script>) 88 88 } 89 89 … … 167 167 def test_register_javascript_include_default 168 168 ENV["RAILS_ASSET_ID"] = "" 169 169 ActionView::Helpers::AssetTagHelper::register_javascript_include_default 'slider' 170 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/ slider.js" type="text/javascript"></script>\n<script src="/javascripts/application.js" type="text/javascript"></script>), javascript_include_tag(:defaults)170 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/application.js" type="text/javascript"></script>\n<script src="/javascripts/slider.js" type="text/javascript"></script>), javascript_include_tag(:defaults) 171 171 ActionView::Helpers::AssetTagHelper::register_javascript_include_default 'lib1', '/elsewhere/blub/lib2' 172 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/ slider.js" type="text/javascript"></script>\n<script src="/javascripts/lib1.js" type="text/javascript"></script>\n<script src="/elsewhere/blub/lib2.js" type="text/javascript"></script>\n<script src="/javascripts/application.js" type="text/javascript"></script>), javascript_include_tag(:defaults)172 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/application.js" type="text/javascript"></script>\n<script src="/javascripts/slider.js" type="text/javascript"></script>\n<script src="/javascripts/lib1.js" type="text/javascript"></script>\n<script src="/elsewhere/blub/lib2.js" type="text/javascript"></script>), javascript_include_tag(:defaults) 173 173 end 174 174 175 def test_custom_javascript_expansions 176 ActionView::Helpers::AssetTagHelper::register_javascript_expansion :monkey, "head", "body", "tail" 177 assert_dom_equal %(<script src="/javascripts/first.js" type="text/javascript"></script>\n<script src="/javascripts/head.js" type="text/javascript"></script>\n<script src="/javascripts/body.js" type="text/javascript"></script>\n<script src="/javascripts/tail.js" type="text/javascript"></script>\n<script src="/javascripts/last.js" type="text/javascript"></script>), javascript_include_tag('first', :monkey, 'last') 178 end 179 175 180 def test_stylesheet_path 176 181 StylePathToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } 177 182 end … … 185 190 StyleLinkToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } 186 191 end 187 192 193 def test_custom_stylesheet_expansions 194 ActionView::Helpers::AssetTagHelper::register_stylesheet_expansion :monkey, "head", "body", "tail" 195 assert_dom_equal %(<link href="/stylesheets/first.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/head.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/body.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/tail.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/last.css" media="screen" rel="stylesheet" type="text/css" />), stylesheet_link_tag('first', :monkey, 'last') 196 end 197 188 198 def test_image_path 189 199 ImagePathToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } 190 200 end -
lib/action_view/helpers/asset_tag_helper.rb
old new 114 114 alias_method :path_to_javascript, :javascript_path # aliased to avoid conflicts with a javascript_path named route 115 115 116 116 JAVASCRIPT_DEFAULT_SOURCES = ['prototype', 'effects', 'dragdrop', 'controls'] unless const_defined?(:JAVASCRIPT_DEFAULT_SOURCES) 117 @@javascript_default_sources = JAVASCRIPT_DEFAULT_SOURCES.dup 117 @@javascript_expansions = { 118 :defaults => JAVASCRIPT_DEFAULT_SOURCES.dup + ["application"] 119 } 120 @@stylesheet_expansions = {} 118 121 119 122 # Returns an html script tag for each of the +sources+ provided. You 120 123 # can pass in the filename (.js extension is optional) of javascript files … … 220 223 end.join("\n") 221 224 end 222 225 end 226 227 def self.register_javascript_expansion(symbol, *sources) 228 @@javascript_expansions[symbol] = sources 229 end 230 231 def self.register_stylesheet_expansion(symbol, *sources) 232 @@stylesheet_expansions[symbol] = sources 233 end 223 234 224 235 # Register one or more additional JavaScript files to be included when 225 236 # <tt>javascript_include_tag :defaults</tt> is called. This method is 226 237 # typically intended to be called from plugin initialization to register additional 227 238 # .js files that the plugin installed in <tt>public/javascripts</tt>. 228 239 def self.register_javascript_include_default(*sources) 229 @@javascript_ default_sources.concat(sources)240 @@javascript_expansions[:defaults].concat(sources) 230 241 end 231 242 232 243 def self.reset_javascript_include_default #:nodoc: 233 @@javascript_ default_sources = JAVASCRIPT_DEFAULT_SOURCES.dup244 @@javascript_expansions[:defaults] = JAVASCRIPT_DEFAULT_SOURCES.dup + ["application"] 234 245 end 235 246 236 247 # Computes the path to a stylesheet asset in the public stylesheets directory. 237 248 # If the +source+ filename has no extension, .css will be appended. 238 249 # Full paths from the document root will be passed through. … … 493 504 end 494 505 495 506 def expand_javascript_sources(sources) 496 case 497 when sources.include?(:all) 498 all_javascript_files = Dir[File.join(JAVASCRIPTS_DIR, '*.js')].collect { |file| File.basename(file).split(".", 0).first }.sort 499 sources = ((@@javascript_default_sources.dup & all_javascript_files) + all_javascript_files).uniq 500 501 when sources.include?(:defaults) 502 sources = sources[0..(sources.index(:defaults))] + 503 @@javascript_default_sources.dup + 504 sources[(sources.index(:defaults) + 1)..sources.length] 505 506 sources.delete(:defaults) 507 sources << "application" if file_exist?(File.join(JAVASCRIPTS_DIR, "application.js")) 507 if sources.include?(:all) 508 @@all_javascript_sources ||= Dir[File.join(JAVASCRIPTS_DIR, '*.js')].collect { |file| File.basename(file).split(".", 0).first }.sort 509 else 510 sources.collect do |source| 511 @@javascript_expansions[source] || source 512 end.flatten 508 513 end 509 510 sources511 514 end 512 515 513 516 def expand_stylesheet_sources(sources) 514 517 if sources.first == :all 515 @@all_stylesheet_sources ||= Dir[File.join(STYLESHEETS_DIR, '*.css')].collect { |file| File.basename(file).split(".", 1).first }.sort518 @@all_stylesheet_sources ||= Dir[File.join(STYLESHEETS_DIR, '*.css')].collect { |file| File.basename(file).split(".", 0).first }.sort 516 519 else 517 sources 520 sources.collect do |source| 521 @@stylesheet_expansions[source] || source 522 end.flatten 518 523 end 519 524 end 520 525