diff --git a/lib/middleman.rb b/lib/middleman.rb index 86df63d6..d9749809 100755 --- a/lib/middleman.rb +++ b/lib/middleman.rb @@ -76,6 +76,9 @@ module Middleman # Custom Feature API autoload :Features, "middleman/core_extensions/features" + # Asset Path Pipeline + autoload :Assets, "middleman/core_extensions/assets" + # DefaultHelpers are the built-in dynamic template helpers. autoload :DefaultHelpers, "middleman/core_extensions/default_helpers" diff --git a/lib/middleman/assets.rb b/lib/middleman/assets.rb deleted file mode 100644 index 0febf00e..00000000 --- a/lib/middleman/assets.rb +++ /dev/null @@ -1,33 +0,0 @@ -module Middleman - module Assets - @@asset_handler_map = [] - @@asset_handler_stack = [] - - def self.register(handler_name, &block) - if block_given? - @@asset_handler_stack << block - @@asset_handler_map << handler_name - end - end - - def self.get_url(path, prefix="", request=nil) - @@asset_handler_stack.last.call(path, prefix, request) - end - - def self.before(position, *args) - current_index = @@asset_handler_map.index(position) - return nil unless current_index - - previous = current_index - 1 - if (previous >= 0) && (previous < @@asset_handler_map.length) - @@asset_handler_stack[previous].call(*args) - else - nil - end - end - end -end - -Middleman::Assets.register :base do |path, prefix, request| - path.include?("://") ? path : File.join(Middleman::Server.http_prefix || "/", prefix, path) -end \ No newline at end of file diff --git a/lib/middleman/core_extensions/assets.rb b/lib/middleman/core_extensions/assets.rb new file mode 100644 index 00000000..83295fbe --- /dev/null +++ b/lib/middleman/core_extensions/assets.rb @@ -0,0 +1,54 @@ +module Middleman::CoreExtensions::Assets + class << self + def registered(app) + app.extend ClassMethods + + app.helpers Helpers + + app.register_asset_handler :base do |path, prefix, request| + path.include?("://") ? path : File.join(app.http_prefix || "/", prefix, path) + end + end + alias :included :registered + end + + module ClassMethods + def register_asset_handler(handler_name, &block) + @asset_handler_map ||= [] + @asset_handler_stack ||= [] + + if block_given? + @asset_handler_stack << block + @asset_handler_map << handler_name + end + end + + def asset_handler_get_url(path, prefix="", request=nil) + @asset_handler_map ||= [] + @asset_handler_stack ||= [] + + @asset_handler_stack.last.call(path, prefix, request) + end + + def before_asset_handler(position, *args) + @asset_handler_map ||= [] + @asset_handler_stack ||= [] + + current_index = @asset_handler_map.index(position) + return nil unless current_index + + previous = current_index - 1 + if (previous >= 0) && (previous < @asset_handler_map.length) + @asset_handler_stack[previous].call(*args) + else + nil + end + end + end + + module Helpers + def asset_url(path, prefix="") + self.class.asset_handler_get_url(path, prefix, request) + end + end +end \ No newline at end of file diff --git a/lib/middleman/core_extensions/default_helpers.rb b/lib/middleman/core_extensions/default_helpers.rb index daae3c63..38d995ee 100644 --- a/lib/middleman/core_extensions/default_helpers.rb +++ b/lib/middleman/core_extensions/default_helpers.rb @@ -56,10 +56,6 @@ module Middleman::CoreExtensions::DefaultHelpers classes.join(' ') end - def asset_url(path, prefix="") - Middleman::Assets.get_url(path, prefix, request) - end - # Padrino's asset handling needs to pass through ours def asset_path(kind, source) return source if source =~ /^http/ diff --git a/lib/middleman/features/asset_host.rb b/lib/middleman/features/asset_host.rb index 564da7a0..4cd94289 100644 --- a/lib/middleman/features/asset_host.rb +++ b/lib/middleman/features/asset_host.rb @@ -2,17 +2,17 @@ module Middleman::Features::AssetHost class << self def registered(app) app.after_feature_init do - if Middleman::Server.asset_host.is_a?(Proc) - ::Compass.configuration.asset_host(&Middleman::Server.asset_host) + if app.asset_host.is_a?(Proc) + ::Compass.configuration.asset_host(&app.asset_host) end end - Middleman::Assets.register :asset_host do |path, prefix, request| - original_output = Middleman::Assets.before(:asset_host, path, prefix, request) + app.register_asset_handler :asset_host do |path, prefix, request| + original_output = app.before_asset_handler(:asset_host, path, prefix, request) valid_extensions = %w(.png .gif .jpg .jpeg .js .css) - asset_prefix = Middleman::Server.asset_host.call(original_output) + asset_prefix = app.asset_host.call(original_output) File.join(asset_prefix, original_output) end diff --git a/lib/middleman/features/cache_buster.rb b/lib/middleman/features/cache_buster.rb index 619c76d5..d2f198b4 100755 --- a/lib/middleman/features/cache_buster.rb +++ b/lib/middleman/features/cache_buster.rb @@ -1,23 +1,23 @@ module Middleman::Features::CacheBuster class << self def registered(app) - Middleman::Assets.register :cache_buster do |path, prefix, request| - http_path = Middleman::Assets.before(:cache_buster, path, prefix, request) + app.register_asset_handler :cache_buster do |path, prefix, request| + http_path = app.before_asset_handler(:cache_buster, path, prefix, request) if http_path.include?("://") || !%w(.css .png .jpg .js .gif).include?(File.extname(http_path)) http_path else begin - prefix = Middleman::Server.images_dir if prefix == Middleman::Server.http_images_path + prefix = app.images_dir if prefix == app.http_images_path rescue end - real_path_static = File.join(Middleman::Server.views, prefix, path) + real_path_static = File.join(app.views, prefix, path) if File.readable?(real_path_static) http_path << "?" + File.mtime(real_path_static).strftime("%s") - elsif Middleman::Server.environment == :build - real_path_dynamic = File.join(Middleman::Server.root, Middleman::Server.build_dir, prefix, path) + elsif app.environment == :build + real_path_dynamic = File.join(app.root, app.build_dir, prefix, path) http_path << "?" + File.mtime(real_path_dynamic).strftime("%s") if File.readable?(real_path_dynamic) end @@ -29,7 +29,7 @@ module Middleman::Features::CacheBuster ::Compass.configuration do |config| config.asset_cache_buster do |path, real_path| real_path = real_path.path if real_path.is_a? File - real_path = real_path.gsub(File.join(Middleman::Server.root, Middleman::Server.build_dir), Middleman::Server.views) + real_path = real_path.gsub(File.join(app.root, app.build_dir), app.views) if File.readable?(real_path) File.mtime(real_path).strftime("%s") else diff --git a/lib/middleman/features/relative_assets.rb b/lib/middleman/features/relative_assets.rb index 568a969f..40b19159 100755 --- a/lib/middleman/features/relative_assets.rb +++ b/lib/middleman/features/relative_assets.rb @@ -3,20 +3,20 @@ module Middleman::Features::RelativeAssets def registered(app) ::Compass.configuration.relative_assets = true - Middleman::Assets.register :relative_assets do |path, prefix, request| + app.register_asset_handler :relative_assets do |path, prefix, request| begin - prefix = Middleman::Server.images_dir if prefix == Middleman::Server.http_images_path + prefix = app.images_dir if prefix == app.http_images_path rescue end if path.include?("://") - Middleman::Assets.before(:relative_assets, path, prefix, request) + app.before_asset_handler(:relative_assets, path, prefix, request) elsif path[0,1] == "/" path else path = File.join(prefix, path) if prefix.length > 0 request_path = request.path_info.dup - request_path << Middleman::Server.index_file if path.match(%r{/$}) + request_path << app.index_file if path.match(%r{/$}) request_path.gsub!(%r{^/}, '') parts = request_path.split('/') diff --git a/lib/middleman/features/tiny_src.rb b/lib/middleman/features/tiny_src.rb index 6665f506..56ba3b07 100644 --- a/lib/middleman/features/tiny_src.rb +++ b/lib/middleman/features/tiny_src.rb @@ -1,8 +1,8 @@ module Middleman::Features::TinySrc class << self def registered(app) - Middleman::Assets.register :tiny_src do |path, prefix, request| - original_output = Middleman::Assets.before(:tiny_src, path, prefix, request) + app.register_asset_handler :tiny_src do |path, prefix, request| + original_output = app.before_asset_handler(:tiny_src, path, prefix, request) "http://i.tinysrc.mobi/#{original_output}" end end diff --git a/lib/middleman/server.rb b/lib/middleman/server.rb index fdd74852..a35a1c6b 100644 --- a/lib/middleman/server.rb +++ b/lib/middleman/server.rb @@ -36,6 +36,9 @@ module Middleman # Setup custom rendering register Middleman::CoreExtensions::Rendering + # Setup asset path pipeline + register Middleman::CoreExtensions::Assets + # Activate built-in helpers register Middleman::CoreExtensions::DefaultHelpers @@ -174,6 +177,4 @@ module Middleman end end end -end - -require "middleman/assets" \ No newline at end of file +end \ No newline at end of file