Fix asset hash with query string or hash params. Closes #1411
This commit is contained in:
parent
ba0416b330
commit
a5821bccec
|
@ -64,9 +64,13 @@ Feature: Assets get file hashes appended to them and references to them are upda
|
||||||
When I go to "/"
|
When I go to "/"
|
||||||
Then I should see 'href="apple-touch-icon.png"'
|
Then I should see 'href="apple-touch-icon.png"'
|
||||||
And I should see 'href="stylesheets/site-d2959d87.css"'
|
And I should see 'href="stylesheets/site-d2959d87.css"'
|
||||||
|
And I should see 'href="stylesheets/fragment-a06f0dfc.css"'
|
||||||
And I should see 'src="javascripts/application-1d8d5276.js"'
|
And I should see 'src="javascripts/application-1d8d5276.js"'
|
||||||
And I should see 'src="images/100px-5fd6fb90.jpg"'
|
And I should see 'src="images/100px-5fd6fb90.jpg"'
|
||||||
And I should see 'srcset="images/100px-5fd6fb90.jpg 1x, images/200px-c11eb203.jpg 2x, images/300px-59adce76.jpg 3x"'
|
And I should see 'srcset="images/100px-5fd6fb90.jpg 1x, images/200px-c11eb203.jpg 2x, images/300px-59adce76.jpg 3x"'
|
||||||
|
And I should see 'src="images/100px-5fd6fb90.jpg?test"'
|
||||||
|
And I should see 'src="images/100px-5fd6fb90.jpg?#test"'
|
||||||
|
And I should see 'src="images/100px-5fd6fb90.jpg#test"'
|
||||||
When I go to "/subdir/"
|
When I go to "/subdir/"
|
||||||
Then I should see 'href="../stylesheets/site-d2959d87.css"'
|
Then I should see 'href="../stylesheets/site-d2959d87.css"'
|
||||||
And I should see 'src="../javascripts/application-1d8d5276.js"'
|
And I should see 'src="../javascripts/application-1d8d5276.js"'
|
||||||
|
@ -75,6 +79,9 @@ Feature: Assets get file hashes appended to them and references to them are upda
|
||||||
Then I should see 'href="../stylesheets/site-d2959d87.css"'
|
Then I should see 'href="../stylesheets/site-d2959d87.css"'
|
||||||
And I should see 'src="../javascripts/application-1d8d5276.js"'
|
And I should see 'src="../javascripts/application-1d8d5276.js"'
|
||||||
And I should see 'src="../images/100px-5fd6fb90.jpg"'
|
And I should see 'src="../images/100px-5fd6fb90.jpg"'
|
||||||
|
And I should see 'src="../images/100px-5fd6fb90.jpg?test"'
|
||||||
|
And I should see 'src="../images/100px-5fd6fb90.jpg?#test"'
|
||||||
|
And I should see 'src="../images/100px-5fd6fb90.jpg#test"'
|
||||||
When I go to "/javascripts/application-1d8d5276.js"
|
When I go to "/javascripts/application-1d8d5276.js"
|
||||||
Then I should see "img.src = '/images/100px-5fd6fb90.jpg'"
|
Then I should see "img.src = '/images/100px-5fd6fb90.jpg'"
|
||||||
When I go to "/stylesheets/site-d2959d87.css"
|
When I go to "/stylesheets/site-d2959d87.css"
|
||||||
|
@ -87,6 +94,11 @@ Feature: Assets get file hashes appended to them and references to them are upda
|
||||||
Then I should see 'images/100px-5fd6fb90.gif'
|
Then I should see 'images/100px-5fd6fb90.gif'
|
||||||
And I should see 'images/100px-5fd6fb90.jpg'
|
And I should see 'images/100px-5fd6fb90.jpg'
|
||||||
And I should see 'images/100px-1242c368.png'
|
And I should see 'images/100px-1242c368.png'
|
||||||
|
When I go to "/stylesheets/fragment-a06f0dfc.css"
|
||||||
|
And I should see 'url("../images/100px-5fd6fb90.jpg")'
|
||||||
|
And I should see 'url("../images/100px-5fd6fb90.jpg?test")'
|
||||||
|
And I should see 'url("../images/100px-5fd6fb90.jpg?#test")'
|
||||||
|
And I should see 'url("../images/100px-5fd6fb90.jpg#test")'
|
||||||
|
|
||||||
Scenario: Hashed assets work with Slim
|
Scenario: Hashed assets work with Slim
|
||||||
Given the Server is running at "asset-hash-app"
|
Given the Server is running at "asset-hash-app"
|
||||||
|
@ -99,13 +111,25 @@ Feature: Assets get file hashes appended to them and references to them are upda
|
||||||
Given the Server is running at "asset-hash-host-app"
|
Given the Server is running at "asset-hash-host-app"
|
||||||
When I go to "/"
|
When I go to "/"
|
||||||
Then I should see 'href="http://middlemanapp.com/stylesheets/site-e587b659.css"'
|
Then I should see 'href="http://middlemanapp.com/stylesheets/site-e587b659.css"'
|
||||||
|
Then I should see 'href="http://middlemanapp.com/stylesheets/fragment-7af0b5ab.css"'
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
|
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
|
||||||
|
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?test"'
|
||||||
|
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test"'
|
||||||
|
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"'
|
||||||
When I go to "/subdir/"
|
When I go to "/subdir/"
|
||||||
Then I should see 'href="http://middlemanapp.com/stylesheets/site-e587b659.css"'
|
Then I should see 'href="http://middlemanapp.com/stylesheets/site-e587b659.css"'
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
|
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
|
||||||
When I go to "/other/"
|
When I go to "/other/"
|
||||||
Then I should see 'href="http://middlemanapp.com/stylesheets/site-e587b659.css"'
|
Then I should see 'href="http://middlemanapp.com/stylesheets/site-e587b659.css"'
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
|
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
|
||||||
|
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?test"'
|
||||||
|
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test"'
|
||||||
|
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"'
|
||||||
|
When I go to "/stylesheets/fragment-7af0b5ab.css"
|
||||||
|
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg")'
|
||||||
|
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg?test")'
|
||||||
|
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test")'
|
||||||
|
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg#test")'
|
||||||
|
|
||||||
Scenario: The asset hash should change when a SASS partial changes
|
Scenario: The asset hash should change when a SASS partial changes
|
||||||
Given the Server is running at "asset-hash-app"
|
Given the Server is running at "asset-hash-app"
|
||||||
|
|
|
@ -4,6 +4,9 @@
|
||||||
|
|
||||||
<h2>Image url:</h2>
|
<h2>Image url:</h2>
|
||||||
<img src="<%= image_path('100px.jpg') %>" srcset="<%= image_path('100px.jpg') %> 1x, <%= image_path('200px.jpg') %> 2x, <%= image_path('300px.jpg') %> 3x">
|
<img src="<%= image_path('100px.jpg') %>" srcset="<%= image_path('100px.jpg') %> 1x, <%= image_path('200px.jpg') %> 2x, <%= image_path('300px.jpg') %> 3x">
|
||||||
|
<%= image_tag('100px.jpg?test') %>
|
||||||
|
<%= image_tag('100px.jpg?#test') %>
|
||||||
|
<%= image_tag('100px.jpg#test') %>
|
||||||
|
|
||||||
<h2>Ignored path:</h2>
|
<h2>Ignored path:</h2>
|
||||||
<link rel="apple-touch-icon" href="apple-touch-icon.png">
|
<link rel="apple-touch-icon" href="apple-touch-icon.png">
|
||||||
|
|
|
@ -3,16 +3,16 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
|
|
||||||
<%= stylesheet_link_tag "site" %>
|
<%= stylesheet_link_tag "site", "fragment" %>
|
||||||
<%= javascript_include_tag "application" %>
|
<%= javascript_include_tag "application" %>
|
||||||
<%= yield_content :head %>
|
<%= yield_content :head %>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="<%= page_classes %>">
|
<body class="<%= page_classes %>">
|
||||||
|
|
||||||
<div id="main" role="main">
|
<div id="main" role="main">
|
||||||
<%= yield %>
|
<%= yield %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -1,2 +1,5 @@
|
||||||
<h2>Image url:</h2>
|
<h2>Image url:</h2>
|
||||||
<img src="<%= image_path('100px.jpg') %>">
|
<img src="<%= image_path('100px.jpg') %>">
|
||||||
|
<img src="<%= image_path('100px.jpg?test') %>">
|
||||||
|
<img src="<%= image_path('100px.jpg?#test') %>">
|
||||||
|
<img src="<%= image_path('100px.jpg#test') %>">
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
#main {
|
||||||
|
padding: 50px;
|
||||||
|
background-image: image-url('100px.jpg');
|
||||||
|
background-image: image-url('100px.jpg?test');
|
||||||
|
background-image: image-url('100px.jpg?#test');
|
||||||
|
background-image: image-url('100px.jpg#test');
|
||||||
|
}
|
|
@ -4,3 +4,6 @@
|
||||||
|
|
||||||
<h2>Image url:</h2>
|
<h2>Image url:</h2>
|
||||||
<%= image_tag('100px.jpg') %>
|
<%= image_tag('100px.jpg') %>
|
||||||
|
<%= image_tag('100px.jpg?test') %>
|
||||||
|
<%= image_tag('100px.jpg?#test') %>
|
||||||
|
<%= image_tag('100px.jpg#test') %>
|
||||||
|
|
|
@ -3,15 +3,15 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
|
|
||||||
<%= stylesheet_link_tag "site" %>
|
<%= stylesheet_link_tag "site", "fragment" %>
|
||||||
<%= yield_content :head %>
|
<%= yield_content :head %>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="<%= page_classes %>">
|
<body class="<%= page_classes %>">
|
||||||
|
|
||||||
<div id="main" role="main">
|
<div id="main" role="main">
|
||||||
<%= yield %>
|
<%= yield %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -1,2 +1,5 @@
|
||||||
<h2>Image url:</h2>
|
<h2>Image url:</h2>
|
||||||
<img src="<%= image_path('100px.jpg') %>">
|
<img src="<%= image_path('100px.jpg') %>">
|
||||||
|
<img src="<%= image_path('100px.jpg?test') %>">
|
||||||
|
<img src="<%= image_path('100px.jpg?#test') %>">
|
||||||
|
<img src="<%= image_path('100px.jpg#test') %>">
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
#main {
|
#main {
|
||||||
padding: 50px;
|
padding: 50px;
|
||||||
|
background-image: image-url('100px.jpg');
|
||||||
|
background-image: image-url('100px.jpg?test');
|
||||||
|
background-image: image-url('100px.jpg?#test');
|
||||||
background-image: image-url('100px.jpg#test');
|
background-image: image-url('100px.jpg#test');
|
||||||
}
|
}
|
||||||
|
|
|
@ -201,31 +201,37 @@ module Middleman
|
||||||
Contract IsA['Middleman::Application'], String, String, Hash => String
|
Contract IsA['Middleman::Application'], String, String, Hash => String
|
||||||
def asset_url(app, path, prefix='', options={})
|
def asset_url(app, path, prefix='', options={})
|
||||||
# Don't touch assets which already have a full path
|
# Don't touch assets which already have a full path
|
||||||
if path.include?('//') || path.start_with?('data:')
|
return path if path.include?('//') || path.start_with?('data:')
|
||||||
path
|
|
||||||
else # rewrite paths to use their destination path
|
uri = URI(path)
|
||||||
result = if resource = app.sitemap.find_resource_by_destination_path(url_for(app, path))
|
path = uri.path
|
||||||
|
|
||||||
|
result = if resource = app.sitemap.find_resource_by_destination_path(url_for(app, path))
|
||||||
|
resource.url
|
||||||
|
else
|
||||||
|
path = File.join(prefix, path)
|
||||||
|
if resource = app.sitemap.find_resource_by_path(path)
|
||||||
resource.url
|
resource.url
|
||||||
else
|
else
|
||||||
path = File.join(prefix, path)
|
File.join(app.config[:http_prefix], path)
|
||||||
if resource = app.sitemap.find_resource_by_path(path)
|
|
||||||
resource.url
|
|
||||||
else
|
|
||||||
File.join(app.config[:http_prefix], path)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if options[:relative] != true
|
|
||||||
result
|
|
||||||
else
|
|
||||||
unless options[:current_resource]
|
|
||||||
raise ArgumentError, '#asset_url must be run in a context with current_resource if relative: true'
|
|
||||||
end
|
|
||||||
|
|
||||||
current_dir = Pathname('/' + options[:current_resource].destination_path)
|
|
||||||
Pathname(result).relative_path_from(current_dir.dirname).to_s
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
final_result = if options[:relative] != true
|
||||||
|
result
|
||||||
|
else
|
||||||
|
unless options[:current_resource]
|
||||||
|
raise ArgumentError, '#asset_url must be run in a context with current_resource if relative: true'
|
||||||
|
end
|
||||||
|
|
||||||
|
current_dir = Pathname('/' + options[:current_resource].destination_path)
|
||||||
|
Pathname(result).relative_path_from(current_dir.dirname).to_s
|
||||||
|
end
|
||||||
|
|
||||||
|
result_uri = URI(final_result)
|
||||||
|
result_uri.query = uri.query
|
||||||
|
result_uri.fragment = uri.fragment
|
||||||
|
result_uri.to_s
|
||||||
end
|
end
|
||||||
|
|
||||||
# Given a source path (referenced either absolutely or relatively)
|
# Given a source path (referenced either absolutely or relatively)
|
||||||
|
|
Loading…
Reference in a new issue