Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

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  
    8383    %(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>), 
    8484    %(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>), 
    8585    %(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>), 
    8787    %(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>) 
    8888  } 
    8989 
     
    167167  def test_register_javascript_include_default 
    168168    ENV["RAILS_ASSET_ID"] = "" 
    169169    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) 
    171171    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) 
    173173  end 
    174174   
     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   
    175180  def test_stylesheet_path 
    176181    StylePathToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } 
    177182  end 
     
    185190    StyleLinkToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } 
    186191  end 
    187192 
     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 
    188198  def test_image_path 
    189199    ImagePathToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } 
    190200  end 
  • lib/action_view/helpers/asset_tag_helper.rb

    old new  
    114114      alias_method :path_to_javascript, :javascript_path # aliased to avoid conflicts with a javascript_path named route 
    115115 
    116116      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 = {} 
    118121 
    119122      # Returns an html script tag for each of the +sources+ provided. You 
    120123      # can pass in the filename (.js extension is optional) of javascript files 
     
    220223          end.join("\n") 
    221224        end 
    222225      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 
    223234 
    224235      # Register one or more additional JavaScript files to be included when 
    225236      # <tt>javascript_include_tag :defaults</tt> is called. This method is 
    226237      # typically intended to be called from plugin initialization to register additional 
    227238      # .js files that the plugin installed in <tt>public/javascripts</tt>. 
    228239      def self.register_javascript_include_default(*sources) 
    229         @@javascript_default_sources.concat(sources) 
     240        @@javascript_expansions[:defaults].concat(sources) 
    230241      end 
    231  
     242       
    232243      def self.reset_javascript_include_default #:nodoc: 
    233         @@javascript_default_sources = JAVASCRIPT_DEFAULT_SOURCES.dup 
     244        @@javascript_expansions[:defaults] = JAVASCRIPT_DEFAULT_SOURCES.dup + ["application"] 
    234245      end 
    235  
     246       
    236247      # Computes the path to a stylesheet asset in the public stylesheets directory. 
    237248      # If the +source+ filename has no extension, .css will be appended. 
    238249      # Full paths from the document root will be passed through. 
     
    493504        end 
    494505 
    495506        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 
    508513          end 
    509  
    510           sources 
    511514        end 
    512515 
    513516        def expand_stylesheet_sources(sources) 
    514517          if sources.first == :all 
    515             @@all_stylesheet_sources ||= Dir[File.join(STYLESHEETS_DIR, '*.css')].collect { |file| File.basename(file).split(".", 1).first }.sort 
     518            @@all_stylesheet_sources ||= Dir[File.join(STYLESHEETS_DIR, '*.css')].collect { |file| File.basename(file).split(".", 0).first }.sort 
    516519          else 
    517             sources 
     520            sources.collect do |source| 
     521              @@stylesheet_expansions[source] || source 
     522            end.flatten 
    518523          end 
    519524        end 
    520525