Add options hash to asset methods to allow special options to be passed through from extensions

This commit is contained in:
Thomas Reynolds 2014-03-31 14:15:46 -07:00
parent 1c37cc6a34
commit 6d2f8cd50c
5 changed files with 17 additions and 10 deletions

View file

@ -6,7 +6,7 @@ gem 'yard', '~> 0.8.0', require: false
# Test tools # Test tools
gem 'cucumber', '~> 1.3.1' gem 'cucumber', '~> 1.3.1'
gem 'fivemat' gem 'fivemat', '~> 1.2.1'
gem 'aruba', '~> 0.5.1' gem 'aruba', '~> 0.5.1'
gem 'rspec', '~> 2.12' gem 'rspec', '~> 2.12'
gem 'simplecov' gem 'simplecov'

View file

@ -167,8 +167,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 Data to pass through.
# @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 then config[:css_dir] when :css then config[:css_dir]
@ -182,15 +183,16 @@ 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 Data to pass through.
# @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?('//') or path.start_with?('data:') if path.include?('//') or path.start_with?('data:')
path path

View file

@ -31,8 +31,9 @@ class Middleman::Extensions::AssetHost < ::Middleman::Extension
# #
# @param [String] path # @param [String] path
# @param [String] prefix # @param [String] prefix
# @param [Hash] options Data to pass through.
# @return [String] # @return [String]
def asset_url(path, prefix='') def asset_url(path, prefix='', options={})
controller = extensions[:asset_host] controller = extensions[:asset_host]
original_output = super original_output = super

View file

@ -22,7 +22,8 @@ class Middleman::Extensions::CacheBuster < ::Middleman::Extension
# asset_url override if we're using cache busting # asset_url override if we're using cache busting
# @param [String] path # @param [String] path
# @param [String] prefix # @param [String] prefix
def asset_url(path, prefix='') # @param [Hash] options Data to pass through.
def asset_url(path, prefix='', options={})
http_path = super http_path = super
if http_path.include?('://') || !%w(.css .png .jpg .jpeg .svg .svgz .js .gif).include?(File.extname(http_path)) if http_path.include?('://') || !%w(.css .png .jpg .jpeg .svg .svgz .js .gif).include?(File.extname(http_path))

View file

@ -14,14 +14,17 @@ 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 Data to pass through.
# @return [String] # @return [String]
def asset_url(path, prefix='') def asset_url(path, prefix='', options={})
path = super(path, prefix) path = super
if path.include?('//') || path.start_with?('data:') || !current_resource requested_resource = options[:current_resource] || current_resource
if path.include?('//') || path.start_with?('data:') || !requested_resource
path path
else else
current_dir = Pathname('/' + current_resource.destination_path) current_dir = Pathname('/' + requested_resource.destination_path)
Pathname(path).relative_path_from(current_dir.dirname).to_s Pathname(path).relative_path_from(current_dir.dirname).to_s
end end
end end