1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Add "extname" option to javascript_include_tag

ActionView::Helpers.asset_path is where the logic for
javascript_include_tag resides.  It takes an extname option for
specifying the extension or false to not append it.  This exposes that
option to javascript_include_tag.

Without the option files that didn't end with ".js" would get the
extension appended to them.  This broke JST templates and other file
types that should be interpreted as JavaScript but who's file extension
isn't ".js"
This commit is contained in:
Nathan Stitt 2013-08-01 13:10:36 -05:00
parent 51c61cfbc8
commit 0855f041df
3 changed files with 27 additions and 3 deletions

View file

@ -1,3 +1,17 @@
* Added an `extname` hash option for `javascript_include_tag` method.
Before:
javascript_include_tag('templates.jst')
# => <script src="/javascripts/templates.jst.js"></script>
After:
javascript_include_tag('templates.jst', extname: false )
# => <script src="/javascripts/templates.jst"></script>
*Nathan Stitt*
* Fix `current_page?` when the URL contains escaped characters and the * Fix `current_page?` when the URL contains escaped characters and the
original URL is using the hexadecimal lowercased. original URL is using the hexadecimal lowercased.

View file

@ -26,7 +26,8 @@ module ActionView
# to <tt>assets/javascripts</tt>, full paths are assumed to be relative to the document # to <tt>assets/javascripts</tt>, full paths are assumed to be relative to the document
# root. Relative paths are idiomatic, use absolute paths only when needed. # root. Relative paths are idiomatic, use absolute paths only when needed.
# #
# When passing paths, the ".js" extension is optional. # When passing paths, the ".js" extension is optional. If you do not want ".js"
# appended to the path <tt>extname: false</tt> can be set on the options.
# #
# You can modify the HTML attributes of the script tag by passing a hash as the # You can modify the HTML attributes of the script tag by passing a hash as the
# last argument. # last argument.
@ -37,6 +38,9 @@ module ActionView
# javascript_include_tag "xmlhr" # javascript_include_tag "xmlhr"
# # => <script src="/assets/xmlhr.js?1284139606"></script> # # => <script src="/assets/xmlhr.js?1284139606"></script>
# #
# javascript_include_tag "template.jst", extname: false
# # => <script src="/assets/template.jst?1284139606"></script>
#
# javascript_include_tag "xmlhr.js" # javascript_include_tag "xmlhr.js"
# # => <script src="/assets/xmlhr.js?1284139606"></script> # # => <script src="/assets/xmlhr.js?1284139606"></script>
# #
@ -51,8 +55,7 @@ module ActionView
# # => <script src="http://www.example.com/xmlhr.js"></script> # # => <script src="http://www.example.com/xmlhr.js"></script>
def javascript_include_tag(*sources) def javascript_include_tag(*sources)
options = sources.extract_options!.stringify_keys options = sources.extract_options!.stringify_keys
path_options = options.extract!('protocol').symbolize_keys path_options = options.extract!('protocol', 'extname').symbolize_keys
sources.uniq.map { |source| sources.uniq.map { |source|
tag_options = { tag_options = {
"src" => path_to_javascript(source, path_options) "src" => path_to_javascript(source, path_options)

View file

@ -51,6 +51,13 @@ class JavaScriptHelperTest < ActionView::TestCase
assert_equal 'foo', output_buffer, 'javascript_tag without a block should not concat to output_buffer' assert_equal 'foo', output_buffer, 'javascript_tag without a block should not concat to output_buffer'
end end
# Setting the :extname option will control what extension (if any) is appended to the url for assets
def test_javascript_include_tag
assert_dom_equal "<script src='/foo.js'></script>", javascript_include_tag('/foo')
assert_dom_equal "<script src='/foo'></script>", javascript_include_tag('/foo', extname: false )
assert_dom_equal "<script src='/foo.bar'></script>", javascript_include_tag('/foo', extname: '.bar' )
end
def test_javascript_tag_with_options def test_javascript_tag_with_options
assert_dom_equal "<script id=\"the_js_tag\">\n//<![CDATA[\nalert('hello')\n//]]>\n</script>", assert_dom_equal "<script id=\"the_js_tag\">\n//<![CDATA[\nalert('hello')\n//]]>\n</script>",
javascript_tag("alert('hello')", :id => "the_js_tag") javascript_tag("alert('hello')", :id => "the_js_tag")