Simplify and fix relative_assets extension to work more consistently. Also, fix a bug in relative link_to inspired by fixing this bug. This fixes #507.
This commit is contained in:
parent
dad9b33174
commit
4faa98e874
|
@ -61,11 +61,11 @@ Feature: link_to helper
|
|||
"""
|
||||
And the Server is running at "indexable-app"
|
||||
When I go to "/link_to/"
|
||||
Then I should see 'absolute: <a href="needs_index/">Needs Index</a>'
|
||||
Then I should see 'relative: <a href="needs_index/">Relative</a>'
|
||||
When I go to "/link_to/sub/"
|
||||
Then I should see 'absolute: <a href="../needs_index/">Needs Index</a>'
|
||||
Then I should see 'relative: <a href="../needs_index/">Relative</a>'
|
||||
When I go to "/link_to/sub/"
|
||||
Then I should see 'absolute: <a href="../../needs_index/">Needs Index</a>'
|
||||
Then I should see 'relative: <a href="../../needs_index/">Relative</a>'
|
||||
|
||||
Scenario: link_to can take a Resource
|
||||
Given a fixture app "indexable-app"
|
||||
|
|
|
@ -88,4 +88,15 @@ Feature: Relative Assets
|
|||
Given "relative_assets" feature is "enabled"
|
||||
And the Server is running at "fonts-app"
|
||||
When I go to "/stylesheets/fonts.css"
|
||||
Then I should see "url('../fonts/StMarie-Thin.otf"
|
||||
Then I should see "url('../fonts/StMarie-Thin.otf"
|
||||
|
||||
Scenario: Relative assets via image_tag
|
||||
Given a fixture app "relative-assets-app"
|
||||
Given "relative_assets" feature is "enabled"
|
||||
And a file named "source/sub/image_tag.html.erb" with:
|
||||
"""
|
||||
<%= image_tag '/img/blank.gif' %>
|
||||
"""
|
||||
And the Server is running at "relative-assets-app"
|
||||
When I go to "/sub/image_tag.html"
|
||||
Then I should see '<img src="../img/blank.gif" />'
|
|
@ -102,9 +102,10 @@ module Middleman
|
|||
source = source.to_s.gsub(/\s/, '')
|
||||
ignore_extension = (kind == :images) # don't append extension
|
||||
source << ".#{kind}" unless ignore_extension or source =~ /\.#{kind}/
|
||||
result_path = source if source =~ %r{^/} # absolute path
|
||||
result_path ||= asset_url(source, asset_folder)
|
||||
"#{result_path}"
|
||||
if source =~ %r{^/} # absolute path
|
||||
asset_folder = ""
|
||||
end
|
||||
asset_url(source, asset_folder)
|
||||
end
|
||||
|
||||
# Overload the regular link_to to be sitemap-aware - if you
|
||||
|
@ -131,10 +132,11 @@ module Middleman
|
|||
raise "Can't use the relative option with an external URL" if relative
|
||||
else
|
||||
# Handle relative urls
|
||||
current_dir = Pathname('/' + current_resource.path).dirname
|
||||
current_source_dir = Pathname('/' + current_resource.path).dirname
|
||||
|
||||
path = Pathname(url)
|
||||
|
||||
url = current_dir.join(path).to_s if path.relative?
|
||||
url = current_source_dir.join(path).to_s if path.relative?
|
||||
|
||||
resource = sitemap.find_resource_by_path(url)
|
||||
|
||||
|
@ -148,6 +150,9 @@ module Middleman
|
|||
if resource
|
||||
if effective_relative
|
||||
resource_url = resource.url
|
||||
|
||||
# Output urls relative to the destination path, not the source path
|
||||
current_dir = Pathname('/' + current_resource.destination_path).dirname
|
||||
new_url = Pathname(resource_url).relative_path_from(current_dir).to_s
|
||||
|
||||
# Put back the trailing slash to avoid unnecessary Apache redirects
|
||||
|
|
|
@ -30,31 +30,13 @@ module Middleman
|
|||
# @param [String] prefix
|
||||
# @return [String]
|
||||
def asset_url(path, prefix="")
|
||||
begin
|
||||
prefix = images_dir if prefix == http_images_path
|
||||
rescue
|
||||
end
|
||||
path = super(path, prefix)
|
||||
|
||||
if path.include?("://")
|
||||
super(path, prefix)
|
||||
elsif path[0,1] == "/"
|
||||
if path.include?("//")
|
||||
path
|
||||
else
|
||||
path = File.join(prefix, path) if prefix.length > 0
|
||||
|
||||
request_path = current_path.dup
|
||||
request_path << index_file if path.match(%r{/$})
|
||||
|
||||
parts = request_path.gsub(%r{^/}, '').split('/')
|
||||
|
||||
if parts.length > 1
|
||||
arry = []
|
||||
(parts.length - 1).times { arry << ".." }
|
||||
arry << path
|
||||
File.join(*arry)
|
||||
else
|
||||
path
|
||||
end
|
||||
current_dir = Pathname('/' + current_resource.destination_path).dirname
|
||||
Pathname(path).relative_path_from(current_dir)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue