Add relative argument to stylesheet and javascript helpers. Closes #1539
This commit is contained in:
parent
e09f7fadb5
commit
3fca2c6961
|
@ -8,6 +8,7 @@ master
|
||||||
* Empower link_to in a i18n context.
|
* Empower link_to in a i18n context.
|
||||||
* Add retina files support on automatic_image_sizes
|
* Add retina files support on automatic_image_sizes
|
||||||
* Fix woff/woff2 confusion in asset hashing.
|
* Fix woff/woff2 confusion in asset hashing.
|
||||||
|
* Support `relative: false` on `stylesheet_link_tag` and `javascript_include_tag`
|
||||||
|
|
||||||
3.3.12
|
3.3.12
|
||||||
===
|
===
|
||||||
|
|
|
@ -21,6 +21,12 @@ Feature: Relative Assets
|
||||||
Given "relative_assets" feature is "disabled"
|
Given "relative_assets" feature is "disabled"
|
||||||
And the Server is running at "relative-assets-app"
|
And the Server is running at "relative-assets-app"
|
||||||
When I go to "/relative_image.html"
|
When I go to "/relative_image.html"
|
||||||
|
Then I should see '"/stylesheets/relative_assets.css"'
|
||||||
|
Then I should see '"/javascripts/app.js"'
|
||||||
|
Then I should see "/images/blank.gif"
|
||||||
|
When I go to "/absolute_image_relative_css.html"
|
||||||
|
Then I should see '"stylesheets/relative_assets.css"'
|
||||||
|
Then I should see '"javascripts/app.js"'
|
||||||
Then I should see "/images/blank.gif"
|
Then I should see "/images/blank.gif"
|
||||||
|
|
||||||
Scenario: Rendering css with the feature enabled
|
Scenario: Rendering css with the feature enabled
|
||||||
|
@ -54,6 +60,11 @@ Feature: Relative Assets
|
||||||
Given "relative_assets" feature is "enabled"
|
Given "relative_assets" feature is "enabled"
|
||||||
And the Server is running at "relative-assets-app"
|
And the Server is running at "relative-assets-app"
|
||||||
When I go to "/relative_image.html"
|
When I go to "/relative_image.html"
|
||||||
|
Then I should see '"stylesheets/relative_assets.css"'
|
||||||
|
Then I should see '"javascripts/app.js"'
|
||||||
|
When I go to "/relative_image_absolute_css.html"
|
||||||
|
Then I should see '"/stylesheets/relative_assets.css"'
|
||||||
|
Then I should see '"/javascripts/app.js"'
|
||||||
Then I should not see "/images/blank.gif"
|
Then I should not see "/images/blank.gif"
|
||||||
And I should see "images/blank.gif"
|
And I should see "images/blank.gif"
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<%= stylesheet_link_tag :relative_assets, relative: true %>
|
||||||
|
<%= javascript_include_tag :app, relative: true %>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<%= image_tag "blank.gif" %>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,3 @@
|
||||||
|
function hello() {
|
||||||
|
console.log('world');
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<%= stylesheet_link_tag :relative_assets %>
|
<%= stylesheet_link_tag :relative_assets %>
|
||||||
|
<%= javascript_include_tag :app %>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<%= image_tag "blank.gif" %>
|
<%= image_tag "blank.gif" %>
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<%= stylesheet_link_tag :relative_assets, relative: false %>
|
||||||
|
<%= javascript_include_tag :app, relative: false %>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<%= image_tag "blank.gif" %>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -99,6 +99,36 @@ class Middleman::CoreExtensions::DefaultHelpers < ::Middleman::Extension
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Override helper to add `relative` opt-out.
|
||||||
|
def stylesheet_link_tag(*sources)
|
||||||
|
options = {
|
||||||
|
:rel => 'stylesheet'
|
||||||
|
}.update(sources.extract_options!.symbolize_keys)
|
||||||
|
|
||||||
|
path_options = {}
|
||||||
|
path_options[:relative] = options.delete(:relative) if options.key?(:relative)
|
||||||
|
|
||||||
|
sources.flatten.inject(ActiveSupport::SafeBuffer.new) do |all,source|
|
||||||
|
all << tag(:link, {
|
||||||
|
href: asset_path(:css, source, path_options)
|
||||||
|
}.update(options))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Override helper to add `relative` opt-out.
|
||||||
|
def javascript_include_tag(*sources)
|
||||||
|
options = sources.extract_options!.symbolize_keys
|
||||||
|
|
||||||
|
path_options = {}
|
||||||
|
path_options[:relative] = options.delete(:relative) if options.key?(:relative)
|
||||||
|
|
||||||
|
sources.flatten.inject(::ActiveSupport::SafeBuffer.new) do |all,source|
|
||||||
|
all << content_tag(:script, nil, {
|
||||||
|
src: asset_path(:js, source, path_options)
|
||||||
|
}.update(options))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Output a stylesheet link tag based on the current path
|
# Output a stylesheet link tag based on the current path
|
||||||
#
|
#
|
||||||
# @param [Symbol] asset_ext The type of asset
|
# @param [Symbol] asset_ext The type of asset
|
||||||
|
@ -153,8 +183,9 @@ class Middleman::CoreExtensions::DefaultHelpers < ::Middleman::Extension
|
||||||
#
|
#
|
||||||
# @param [Symbol] kind The type of file
|
# @param [Symbol] kind The type of file
|
||||||
# @param [String] source The path to the file
|
# @param [String] source The path to the file
|
||||||
|
# @param [Hash] options Additional options.
|
||||||
# @return [String]
|
# @return [String]
|
||||||
def asset_path(kind, source)
|
def asset_path(kind, source, options={})
|
||||||
return source if source.to_s.include?('//') || source.to_s.start_with?('data:')
|
return source if source.to_s.include?('//') || source.to_s.start_with?('data:')
|
||||||
asset_folder = case kind
|
asset_folder = case kind
|
||||||
when :css
|
when :css
|
||||||
|
@ -174,29 +205,38 @@ class Middleman::CoreExtensions::DefaultHelpers < ::Middleman::Extension
|
||||||
source << ".#{kind}" unless ignore_extension || source.end_with?(".#{kind}")
|
source << ".#{kind}" unless ignore_extension || source.end_with?(".#{kind}")
|
||||||
asset_folder = '' if source.start_with?('/') # absolute path
|
asset_folder = '' if source.start_with?('/') # absolute path
|
||||||
|
|
||||||
asset_url(source, asset_folder)
|
asset_url(source, asset_folder, options)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Get the URL of an asset given a type/prefix
|
# Get the URL of an asset given a type/prefix
|
||||||
#
|
#
|
||||||
# @param [String] path The path (such as "photo.jpg")
|
# @param [String] path The path (such as "photo.jpg")
|
||||||
# @param [String] prefix The type prefix (such as "images")
|
# @param [String] prefix The type prefix (such as "images")
|
||||||
|
# @param [Hash] options Additional options.
|
||||||
# @return [String] The fully qualified asset url
|
# @return [String] The fully qualified asset url
|
||||||
def asset_url(path, prefix='')
|
def asset_url(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:')
|
if path.include?('//') || path.start_with?('data:') || !current_resource
|
||||||
path
|
path
|
||||||
else # rewrite paths to use their destination path
|
else # rewrite paths to use their destination path
|
||||||
if resource = sitemap.find_resource_by_destination_path(url_for(path))
|
result = if resource = sitemap.find_resource_by_destination_path(url_for(path))
|
||||||
resource.url
|
resource.url
|
||||||
else
|
else
|
||||||
path = File.join(prefix, path)
|
path = File.join(prefix, path)
|
||||||
|
|
||||||
if resource = sitemap.find_resource_by_path(path)
|
if resource = sitemap.find_resource_by_path(path)
|
||||||
resource.url
|
resource.url
|
||||||
else
|
else
|
||||||
File.join(config[:http_prefix], path)
|
File.join(config[:http_prefix], path)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if options[:relative] != true
|
||||||
|
result
|
||||||
|
else
|
||||||
|
current_dir = Pathname('/' + current_resource.destination_path)
|
||||||
|
Pathname(result).relative_path_from(current_dir.dirname).to_s
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -13,16 +13,12 @@ class Middleman::Extensions::RelativeAssets < ::Middleman::Extension
|
||||||
# asset_url override for relative assets
|
# asset_url override for relative assets
|
||||||
# @param [String] path
|
# @param [String] path
|
||||||
# @param [String] prefix
|
# @param [String] prefix
|
||||||
|
# @param [Hash] options Additional options.
|
||||||
# @return [String]
|
# @return [String]
|
||||||
def asset_url(path, prefix='')
|
def asset_url(path, prefix='', options={})
|
||||||
path = super(path, prefix)
|
options[:relative] = true unless options.key?(:relative)
|
||||||
|
|
||||||
if path.include?('//') || path.start_with?('data:') || !current_resource
|
path = super(path, prefix, options)
|
||||||
path
|
|
||||||
else
|
|
||||||
current_dir = Pathname('/' + current_resource.destination_path)
|
|
||||||
Pathname(path).relative_path_from(current_dir.dirname).to_s
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue