# module ActionView::Helpers::AssetTagHelper::JavascriptTagHelpers

### Public Instance Methods

javascript_include_tag(*sources) click to toggle source

Returns an HTML script tag for each of the `sources` provided.

Sources may be paths to JavaScript files. Relative paths are assumed to be relative to `public/javascripts`, full paths are assumed to be relative to the document root. Relative paths are idiomatic, use absolute paths only when needed.

When passing paths, the “.js” extension is optional.

If the application is not using the asset pipeline, to include the default JavaScript expansion pass `:defaults` as source. By default, `:defaults` loads jQuery, and that can be overridden in `config/application.rb`:

    config.action_view.javascript_expansions[:defaults] = %w(foo.js bar.js)

When using `:defaults` or `:all`, if an `application.js` file exists in `public/javascripts` it will be included as well at the end.

You can modify the HTML attributes of the script tag by passing a hash as the last argument.

#### Examples¶ ↑

    javascript_include_tag "xmlhr"
    # => <script type="text/javascript" src="/javascripts/xmlhr.js?1284139606"></script>

    javascript_include_tag "xmlhr.js"
    # => <script type="text/javascript" src="/javascripts/xmlhr.js?1284139606"></script>

    javascript_include_tag "common.javascript", "/elsewhere/cools"
    # => <script type="text/javascript" src="/javascripts/common.javascript?1284139606"></script>
    #    <script type="text/javascript" src="/elsewhere/cools.js?1423139606"></script>

    javascript_include_tag "http://www.example.com/xmlhr"
    # => <script type="text/javascript" src="http://www.example.com/xmlhr"></script>

    javascript_include_tag "http://www.example.com/xmlhr.js"
    # => <script type="text/javascript" src="http://www.example.com/xmlhr.js"></script>

    javascript_include_tag :defaults
    # => <script type="text/javascript" src="/javascripts/jquery.js?1284139606"></script>
    #    <script type="text/javascript" src="/javascripts/rails.js?1284139606"></script>
    #    <script type="text/javascript" src="/javascripts/application.js?1284139606"></script>

Note: The application.js file is only referenced if it exists

You can also include all JavaScripts in the `javascripts` directory using `:all` as the source:

    javascript_include_tag :all
    # => <script type="text/javascript" src="/javascripts/jquery.js?1284139606"></script>
    #    <script type="text/javascript" src="/javascripts/rails.js?1284139606"></script>
    #    <script type="text/javascript" src="/javascripts/shop.js?1284139606"></script>
    #    <script type="text/javascript" src="/javascripts/checkout.js?1284139606"></script>
    #    <script type="text/javascript" src="/javascripts/application.js?1284139606"></script>

Note that your defaults of choice will be included first, so they will be available to all subsequently included files.

If you want Rails to search in all the subdirectories under `public/javascripts`, you should explicitly set `:recursive`:

    javascript_include_tag :all, :recursive => true

## Caching multiple JavaScripts into one¶ ↑

You can also cache multiple JavaScripts into one file, which requires less HTTP connections to download and can better be compressed by gzip (leading to faster transfers). Caching will only happen if `config.perform_caching` is set to true (which is the case by default for the Rails production environment, but not for the development environment).

#### Examples¶ ↑

    # assuming config.perform_caching is false
    javascript_include_tag :all, :cache => true
    # => <script type="text/javascript" src="/javascripts/jquery.js?1284139606"></script>
    #    <script type="text/javascript" src="/javascripts/rails.js?1284139606"></script>
    #    <script type="text/javascript" src="/javascripts/shop.js?1284139606"></script>
    #    <script type="text/javascript" src="/javascripts/checkout.js?1284139606"></script>
    #    <script type="text/javascript" src="/javascripts/application.js?1284139606"></script>

    # assuming config.perform_caching is true
    javascript_include_tag :all, :cache => true
    # => <script type="text/javascript" src="/javascripts/all.js?1344139789"></script>

    # assuming config.perform_caching is false
    javascript_include_tag "jquery", "cart", "checkout", :cache => "shop"
    # => <script type="text/javascript" src="/javascripts/jquery.js?1284139606"></script>
    #    <script type="text/javascript" src="/javascripts/cart.js?1289139157"></script>
    #    <script type="text/javascript" src="/javascripts/checkout.js?1299139816"></script>

    # assuming config.perform_caching is true
    javascript_include_tag "jquery", "cart", "checkout", :cache => "shop"
    # => <script type="text/javascript" src="/javascripts/shop.js?1299139816"></script>

The `:recursive` option is also available for caching:

    javascript_include_tag :all, :cache => true, :recursive => true

    # File lib/action_view/helpers/asset_tag_helpers/javascript_tag_helpers.rb, line 186
    def javascript_include_tag(*sources)
      @javascript_include ||= JavascriptIncludeTag.new(config, asset_paths)
      @javascript_include.include_tag(*sources)
    end

javascript_path(source) click to toggle source

Computes the path to a javascript asset in the public javascripts directory. If the `source` filename has no extension, .js will be appended (except for explicit URIs) Full paths from the document root will be passed through. Used internally by #javascript_include_tag to build the script path.

#### Examples¶ ↑

    javascript_path "xmlhr"                              # => /javascripts/xmlhr.js
    javascript_path "dir/xmlhr.js"                       # => /javascripts/dir/xmlhr.js
    javascript_path "/dir/xmlhr"                         # => /dir/xmlhr.js
    javascript_path "http://www.example.com/js/xmlhr"    # => http://www.example.com/js/xmlhr
    javascript_path "http://www.example.com/js/xmlhr.js" # => http://www.example.com/js/xmlhr.js

    # File lib/action_view/helpers/asset_tag_helpers/javascript_tag_helpers.rb, line 86
    def javascript_path(source)
      asset_paths.compute_public_path(source, 'javascripts', :ext => 'js')
    end

Also aliased as: path_to_javascript
path_to_javascript(source)
Alias for: javascript_path