diff --git a/lib/middleman/base.rb b/lib/middleman/base.rb index 72bbcab6..3414440d 100644 --- a/lib/middleman/base.rb +++ b/lib/middleman/base.rb @@ -1,5 +1,4 @@ require 'rubygems' unless ENV['NO_RUBYGEMS'] -require 'haml' require 'sinatra/base' require 'middleman/helpers' @@ -15,14 +14,16 @@ module Middleman set :environment, ENV['MM_ENV'] || :development set :supported_formats, [] set :index_file, 'index.html' + set :js_dir, "javascripts" set :css_dir, "stylesheets" set :images_dir, "images" set :build_dir, "build" + set :http_prefix, "/" enable :compass enable :content_for enable :sprockets - #enable :slickmap + disable :slickmap disable :cache_buster disable :minify_css disable :minify_javascript @@ -38,7 +39,6 @@ module Middleman enable :minify_css enable :minify_javascript enable :cache_buster - # disable :slickmap end def template_exists?(path, renderer=nil) diff --git a/lib/middleman/features/cache_buster.rb b/lib/middleman/features/cache_buster.rb index 22314350..a8433559 100644 --- a/lib/middleman/features/cache_buster.rb +++ b/lib/middleman/features/cache_buster.rb @@ -1,9 +1,18 @@ - - -# def cache_buster -# if File.readable?(real_path) -# File.mtime(real_path).strftime("%s") -# else -# $stderr.puts "WARNING: '#{File.basename(path)}' was not found (or cannot be read) in #{File.dirname(real_path)}" -# end -# end \ No newline at end of file +class Middleman::Base + helpers do + alias_method :pre_cache_buster_asset_url, :asset_url + def asset_url(path, prefix="") + path = pre_cache_buster_asset_url(path, prefix) + if path.include?("://") + path + else + real_path = File.join(options.public, path) + if File.readable?(real_path) + path << "?" + File.mtime(real_path).strftime("%s") + else + $stderr.puts "WARNING: '#{File.basename(path)}' was not found (or cannot be read) in #{File.dirname(real_path)}" + end + end + end + end +end \ No newline at end of file diff --git a/lib/middleman/features/compass.rb b/lib/middleman/features/compass.rb index ea323296..956e9bb7 100644 --- a/lib/middleman/features/compass.rb +++ b/lib/middleman/features/compass.rb @@ -17,9 +17,9 @@ class Middleman::Base false end end - - config.http_images_path = "/#{self.images_dir}" - config.http_stylesheets_path = "/#{self.css_dir}" + + config.http_images_path = File.join(self.http_prefix, self.images_dir) + config.http_stylesheets_path = File.join(self.http_prefix, self.css_dir) config.add_import_path(config.sass_dir) end diff --git a/lib/middleman/features/haml.rb b/lib/middleman/features/haml.rb index 0c2018e7..1d831f91 100644 --- a/lib/middleman/features/haml.rb +++ b/lib/middleman/features/haml.rb @@ -1,3 +1,5 @@ +require 'haml' + module Middleman module Haml def self.included(base) diff --git a/lib/middleman/features/relative_assets.rb b/lib/middleman/features/relative_assets.rb index 63320fe6..1039513f 100644 --- a/lib/middleman/features/relative_assets.rb +++ b/lib/middleman/features/relative_assets.rb @@ -8,12 +8,14 @@ class Middleman::Base end helpers do - def asset_url(path) + alias_method :pre_relative_asset_url, :asset_url + def asset_url(path, prefix="") + path = pre_relative_asset_url(path, prefix) if path.include?("://") path else request_path = request.path_info.dup - request_path << "index.html" if path.match(%r{/$}) + request_path << self.index_file if path.match(%r{/$}) request_path.gsub!(%r{^/}, '') parts = request_path.split('/') diff --git a/lib/middleman/features/slickmap.rb b/lib/middleman/features/slickmap.rb index 917c2746..cf84338b 100644 --- a/lib/middleman/features/slickmap.rb +++ b/lib/middleman/features/slickmap.rb @@ -1,5 +1,24 @@ require 'slickmap' -get '/sitemap.html' do - haml :sitemap, :layout => false -end \ No newline at end of file +class Middleman::Base + def build_sitemap(&block) + # views - stylesheets + # public + # .select + # block.call(this) + end + + get '/sitemap.html' do + @tree = build_sitemap do |file_name| + true + end + haml :sitemap, :layout => false + end + + use_in_file_templates! +end + +__END__ + +@@ sitemap +%div.title Hello world!!!!! \ No newline at end of file diff --git a/lib/middleman/helpers.rb b/lib/middleman/helpers.rb index 5bc07cbf..3fce5628 100644 --- a/lib/middleman/helpers.rb +++ b/lib/middleman/helpers.rb @@ -2,7 +2,7 @@ module Middleman module Helpers def page_classes(*additional) path = request.path_info - path << "index.html" if path.match(%r{/$}) + path << options.index_file if path.match(%r{/$}) path.gsub!(%r{^/}, '') classes = [] @@ -20,26 +20,27 @@ module Middleman %Q{#{title}} end - def asset_url(path) - path.include?("://") ? path : "/#{path}" + def asset_url(path, prefix="") + base_url = File.join(options.http_prefix, prefix) + path.include?("://") ? path : File.join(base_url, path) end def image_tag(path, options={}) options[:alt] ||= "" - params = options.merge(:src => asset_url(path)) + params = options.merge(:src => asset_url(path, self.images_dir)) params = params.map { |k,v| %Q{#{k}="#{v}"}}.join(' ') "" end def javascript_include_tag(path, options={}) - params = options.merge(:src => asset_url(path), :type => "text/javascript") + params = options.merge(:src => asset_url(path, self.js_dir), :type => "text/javascript") params = params.map { |k,v| %Q{#{k}="#{v}"}}.join(' ') "" end def stylesheet_link_tag(path, options={}) options[:rel] ||= "stylesheet" - params = options.merge(:href => asset_url(path), :type => "text/css") + params = options.merge(:href => asset_url(path, self.css_dir), :type => "text/css") params = params.map { |k,v| %Q{#{k}="#{v}"}}.join(' ') "" end diff --git a/spec/cache_buster_spec.rb b/spec/cache_buster_spec.rb new file mode 100644 index 00000000..40fae46c --- /dev/null +++ b/spec/cache_buster_spec.rb @@ -0,0 +1,28 @@ +require File.join(File.dirname(__FILE__), "spec_helper") + +base = ::Middleman::Base +base.set :root, File.join(File.dirname(__FILE__), "fixtures", "sample") + +describe "Cache Buster Feature" do + before do + base.disable :cache_buster + base.init! + @app = base.new + end + + it "should not append query string if off" do + @app.asset_url("stylesheets/static.css").should_not include("?") + end +end + +describe "Cache Buster Feature" do + before do + base.enable :cache_buster + base.init! + @app = base.new + end + + it "should append query string if on" do + @app.asset_url("stylesheets/static.css").should include("?") + end +end \ No newline at end of file diff --git a/spec/relative_assets_spec.rb b/spec/relative_assets_spec.rb new file mode 100644 index 00000000..622dabf1 --- /dev/null +++ b/spec/relative_assets_spec.rb @@ -0,0 +1,28 @@ +# require File.join(File.dirname(__FILE__), "spec_helper") +# +# base = ::Middleman::Base +# base.set :root, File.join(File.dirname(__FILE__), "fixtures", "sample") +# +# describe "Relative Assets Feature" do +# before do +# base.disable :relative_assets +# base.init! +# @app = base.new +# end +# +# it "should not contain ../ if off" do +# @app.asset_url("stylesheets/static.css").should_not include("?") +# end +# end +# +# describe "Relative Assets Feature" do +# before do +# base.enable :relative_assets +# base.init! +# @app = base.new +# end +# +# it "should contain ../ if on" do +# @app.asset_url("stylesheets/static.css").should include("?") +# end +# end \ No newline at end of file