middleman 1.2.8 → 2.0.0.beta2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. data/.gitignore +1 -0
  2. data/CHANGELOG +7 -0
  3. data/README.rdoc +1 -1
  4. data/bin/mm-server +15 -39
  5. data/features/coffee-script.feature +6 -1
  6. data/features/minify_javascript.feature +14 -6
  7. data/features/slim.feature +7 -0
  8. data/features/step_definitions/builder_steps.rb +1 -23
  9. data/features/step_definitions/env.rb +7 -1
  10. data/features/step_definitions/generator_steps.rb +1 -1
  11. data/features/step_definitions/middleman_steps.rb +5 -0
  12. data/fixtures/test-app/config.rb +2 -0
  13. data/fixtures/test-app/{views → source}/_partial.haml +0 -0
  14. data/fixtures/test-app/{views → source}/asset_host.html.haml +0 -0
  15. data/fixtures/test-app/{views → source}/auto-css.html.haml +0 -0
  16. data/fixtures/test-app/{views → source}/auto-image-sizes.html.haml +0 -0
  17. data/fixtures/test-app/{views → source}/cache-buster.html.haml +0 -0
  18. data/fixtures/test-app/{views → source}/custom-layout-dir/index.html.haml +0 -0
  19. data/fixtures/test-app/{views → source}/custom-layout.html.haml +0 -0
  20. data/fixtures/test-app/source/front-matter.html.erb +7 -0
  21. data/fixtures/test-app/{public → source}/images/blank.gif +0 -0
  22. data/fixtures/test-app/{views → source}/index.html.haml +0 -0
  23. data/fixtures/test-app/source/inline-coffeescript.html.haml +3 -0
  24. data/fixtures/test-app/{views → source}/inline-css.html.haml +0 -0
  25. data/fixtures/test-app/{views → source}/inline-js.html.haml +1 -1
  26. data/fixtures/test-app/{views → source}/javascripts/coffee_test.js.coffee +0 -0
  27. data/fixtures/test-app/source/javascripts/jquery.plugin.with.dots.js +1 -0
  28. data/fixtures/test-app/{views → source}/layout.haml +0 -0
  29. data/fixtures/test-app/{views → source}/layouts/custom.haml +0 -0
  30. data/fixtures/test-app/{views → source}/padrino_test.html.haml +0 -0
  31. data/fixtures/test-app/{views → source}/page-classes.html.haml +0 -0
  32. data/fixtures/test-app/{views → source}/services/index.html.haml +0 -0
  33. data/fixtures/test-app/source/slim.html.slim +7 -0
  34. data/fixtures/test-app/{public → source}/static.html +0 -0
  35. data/fixtures/test-app/{views → source}/stylesheets/asset_host.css.sass +0 -0
  36. data/fixtures/test-app/{public → source}/stylesheets/auto-css.css +0 -0
  37. data/fixtures/test-app/{views → source}/stylesheets/relative_assets.css.sass +0 -0
  38. data/fixtures/test-app/{views → source}/stylesheets/site.css.sass +0 -0
  39. data/fixtures/test-app/{views → source}/stylesheets/site_scss.css.scss +0 -0
  40. data/fixtures/test-app/{public → source}/stylesheets/static.css +0 -0
  41. data/fixtures/test-app/{public → source}/stylesheets/sub1/auto-css.css +0 -0
  42. data/fixtures/test-app/{public → source}/stylesheets/sub1/sub2/auto-css.css +0 -0
  43. data/fixtures/test-app/{views → source}/tiny_src.html.haml +0 -0
  44. data/lib/middleman.rb +1 -0
  45. data/lib/middleman/builder.rb +15 -22
  46. data/lib/middleman/features.rb +7 -1
  47. data/lib/middleman/features/automatic_image_sizes.rb +1 -1
  48. data/lib/middleman/features/blog.rb +118 -0
  49. data/lib/middleman/features/cache_buster.rb +2 -2
  50. data/lib/middleman/features/data.rb +19 -6
  51. data/lib/middleman/features/default_helpers.rb +1 -1
  52. data/lib/middleman/features/front_matter.rb +69 -0
  53. data/lib/middleman/features/live_reload.rb +8 -3
  54. data/lib/middleman/features/minify_javascript/rack.rb +27 -6
  55. data/lib/middleman/renderers/haml.rb +1 -0
  56. data/lib/middleman/renderers/sass.rb +5 -4
  57. data/lib/middleman/renderers/slim.rb +12 -0
  58. data/lib/middleman/server.rb +30 -11
  59. data/lib/middleman/templates/default.rb +4 -4
  60. data/lib/middleman/templates/default/{views → source}/index.html.haml +0 -0
  61. data/lib/middleman/templates/default/{views → source}/layout.haml +0 -0
  62. data/lib/middleman/templates/default/source/stylesheets/site.css.sass +34 -0
  63. data/lib/middleman/templates/html5.rb +2 -2
  64. data/lib/middleman/templates/html5/{public → source}/404.html +0 -0
  65. data/lib/middleman/templates/html5/{public → source}/apple-touch-icon.png +0 -0
  66. data/lib/middleman/templates/html5/{public → source}/crossdomain.xml +0 -0
  67. data/lib/middleman/templates/html5/{public → source}/css/handheld.css +0 -0
  68. data/lib/middleman/templates/html5/{public → source}/css/style.css +0 -0
  69. data/lib/middleman/templates/html5/{public → source}/favicon.ico +0 -0
  70. data/lib/middleman/templates/html5/{public → source}/humans.txt +0 -0
  71. data/lib/middleman/templates/html5/{public → source}/images/.gitignore +0 -0
  72. data/lib/middleman/templates/html5/{public → source}/index.html +0 -0
  73. data/lib/middleman/templates/html5/{public → source}/js/libs/dd_belatedpng.js +0 -0
  74. data/lib/middleman/templates/html5/{public → source}/js/libs/jquery-1.5.0.js +0 -0
  75. data/lib/middleman/templates/html5/{public → source}/js/libs/jquery-1.5.0.min.js +0 -0
  76. data/lib/middleman/templates/html5/{public → source}/js/libs/modernizr-1.6.min.js +0 -0
  77. data/lib/middleman/templates/html5/{public → source}/js/mylibs/.gitignore +0 -0
  78. data/lib/middleman/templates/html5/{public → source}/js/plugins.js +0 -0
  79. data/lib/middleman/templates/html5/{public → source}/js/script.js +0 -0
  80. data/lib/middleman/templates/html5/{public → source}/robots.txt +0 -0
  81. data/lib/middleman/templates/xhtml.rb +4 -4
  82. data/lib/middleman/templates/xhtml/{views → source}/index.html.haml +0 -0
  83. data/lib/middleman/templates/xhtml/{views → source}/layout.haml +0 -0
  84. data/lib/middleman/templates/xhtml/source/stylesheets/site.css.sass +34 -0
  85. data/lib/middleman/version.rb +1 -1
  86. data/middleman.gemspec +7 -7
  87. metadata +149 -113
  88. data/lib/middleman/templates/default/views/stylesheets/site.css.sass +0 -27
  89. data/lib/middleman/templates/xhtml/views/stylesheets/site.css.sass +0 -27
@@ -15,7 +15,7 @@ module Middleman::Features::AutomaticImageSizes
15
15
  http_prefix = settings.http_images_path rescue settings.images_dir
16
16
 
17
17
  begin
18
- real_path = File.join(settings.public, settings.images_dir, path)
18
+ real_path = File.join(settings.views, settings.images_dir, path)
19
19
  if File.exists? real_path
20
20
  dimensions = ::FastImage.size(real_path, :raise_on_failure => true)
21
21
  params[:width] ||= dimensions[0]
@@ -0,0 +1,118 @@
1
+ require "rdiscount"
2
+
3
+ module Middleman
4
+ module Features
5
+ module Blog
6
+ class << self
7
+ def registered(app)
8
+ # Include helpers
9
+ app.helpers Middleman::Features::Blog::Helpers
10
+
11
+ app.after_feature_init do
12
+ if !app.settings.respond_to? :blog_permalink
13
+ app.set :blog_permalink, "/:year/:month/:day/:title.html"
14
+ end
15
+
16
+ if !app.settings.respond_to? :blog_layout
17
+ app.set :blog_layout, "layout"
18
+ end
19
+
20
+ if !app.settings.respond_to? :blog_summary_separator
21
+ app.set :blog_summary_separator, /READMORE/
22
+ end
23
+
24
+ if !app.settings.respond_to? :blog_summary_length
25
+ app.set :blog_summary_length, 250
26
+ end
27
+
28
+ if !app.settings.respond_to? :blog_layout_engine
29
+ app.set :blog_layout_engine, "erb"
30
+ end
31
+
32
+ if !app.settings.respond_to? :blog_index_template
33
+ app.set :blog_index_template, "index_template"
34
+ end
35
+
36
+ if !app.settings.respond_to? :blog_article_template
37
+ app.set :blog_article_template, "article_template"
38
+ end
39
+
40
+ $stderr.puts "== Blog: #{app.settings.blog_permalink}"
41
+
42
+ articles_glob = File.join(app.views, app.settings.blog_permalink.gsub(/(:\w+)/, "*") + ".*")
43
+
44
+ articles = Dir[articles_glob].map do |article|
45
+ template_content = File.read(article)
46
+ data, content = parse_front_matter(template_content)
47
+ data["date"] = Date.parse(data["date"])
48
+
49
+ yaml_regex = /^(---\s*\n.*?\n?)^(---\s*$\n?)/m
50
+ data["raw"] = template_content.split(yaml_regex).last
51
+ data["url"] = article.gsub(app.views, "").split(".html").first + ".html"
52
+
53
+ all_content = Tilt.new(article).render
54
+ data["body"] = all_content.gsub!(app.settings.blog_summary_separator, "")
55
+
56
+ sum = if data["raw"] =~ app.settings.blog_summary_separator
57
+ data["raw"].split(app.settings.blog_summary_separator).first
58
+ else data["raw"].match(/(.{1,#{app.settings.blog_summary_length}}.*?)(\n|\Z)/m).to_s
59
+ end
60
+
61
+ engine = RDiscount.new(sum)
62
+ data["summary"] = engine.to_html
63
+ data
64
+ end.sort { |a, b| b["date"] <=> a["date"] }
65
+
66
+ app.data_content("blog", { :articles => articles })
67
+
68
+ app.get(app.settings.blog_permalink) do
69
+ options = {}
70
+ options[:layout] = settings.blog_layout
71
+ options[:layout_engine] = settings.blog_layout_engine
72
+
73
+ extensionless_path, template_engine = resolve_template(request.path)
74
+
75
+ full_file_path = "#{extensionless_path}.#{template_engine}"
76
+ system_path = File.join(settings.views, full_file_path)
77
+ data, content = self.class.parse_front_matter(File.read(system_path))
78
+
79
+ # Forward remaining data to helpers
80
+ self.class.data_content("page", data)
81
+
82
+ output = render(request.path, options)
83
+
84
+ # No need for separator on permalink page
85
+ output.gsub!(settings.blog_summary_separator, "")
86
+
87
+ status 200
88
+ output
89
+ end
90
+ end
91
+
92
+ end
93
+ alias :included :registered
94
+ end
95
+
96
+ module Helpers
97
+ def is_blog_article?
98
+ !current_article_title.blank?
99
+ end
100
+
101
+ def blog_title
102
+ end
103
+
104
+ def current_article_date
105
+ DateTime.parse(current_article_metadata.date)
106
+ end
107
+
108
+ def current_article_title
109
+ current_article_metadata.title
110
+ end
111
+
112
+ def current_article_metadata
113
+ data.page
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
@@ -12,7 +12,7 @@ module Middleman::Features::CacheBuster
12
12
  rescue
13
13
  end
14
14
 
15
- real_path_static = File.join(Middleman::Server.public, prefix, path)
15
+ real_path_static = File.join(Middleman::Server.views, prefix, path)
16
16
 
17
17
  if File.readable?(real_path_static)
18
18
  http_path << "?" + File.mtime(real_path_static).strftime("%s")
@@ -29,7 +29,7 @@ module Middleman::Features::CacheBuster
29
29
  ::Compass.configuration do |config|
30
30
  config.asset_cache_buster do |path, real_path|
31
31
  real_path = real_path.path if real_path.is_a? File
32
- real_path = real_path.gsub(File.join(Middleman::Server.root, Middleman::Server.build_dir), Middleman::Server.public)
32
+ real_path = real_path.gsub(File.join(Middleman::Server.root, Middleman::Server.build_dir), Middleman::Server.views)
33
33
  if File.readable?(real_path)
34
34
  File.mtime(real_path).strftime("%s")
35
35
  else
@@ -25,14 +25,18 @@ module Middleman::Features::Data
25
25
  def method_missing(path)
26
26
  response = nil
27
27
 
28
+ @@local_sources ||= {}
28
29
  @@remote_sources ||= {}
29
- if @@remote_sources.has_key?(path.to_s)
30
- response = HTTParty.get(@@remote_sources[path.to_s]).parsed_response
31
- end
32
30
 
33
- file_path = File.join(@app.class.root, "data", "#{path}.yml")
34
- if File.exists? file_path
35
- response = YAML.load_file(file_path)
31
+ if @@local_sources.has_key?(path.to_s)
32
+ response = @@local_sources[path.to_s]
33
+ elsif @@remote_sources.has_key?(path.to_s)
34
+ response = HTTParty.get(@@remote_sources[path.to_s]).parsed_response
35
+ else
36
+ file_path = File.join(@app.class.root, "data", "#{path}.yml")
37
+ if File.exists? file_path
38
+ response = YAML.load_file(file_path)
39
+ end
36
40
  end
37
41
 
38
42
  if response
@@ -44,6 +48,11 @@ module Middleman::Features::Data
44
48
  @@remote_sources ||= {}
45
49
  @@remote_sources[name.to_s] = json_url
46
50
  end
51
+
52
+ def self.data_content(name, content)
53
+ @@local_sources ||= {}
54
+ @@local_sources[name.to_s] = content
55
+ end
47
56
 
48
57
  private
49
58
  def recursively_enhance(data)
@@ -75,5 +84,9 @@ module Middleman::Features::Data
75
84
  def data_source(name, url)
76
85
  Middleman::Features::Data::DataObject.add_source(name, url)
77
86
  end
87
+
88
+ def data_content(name, content)
89
+ Middleman::Features::Data::DataObject.data_content(name, content)
90
+ end
78
91
  end
79
92
  end
@@ -14,7 +14,7 @@ module Middleman::Features::DefaultHelpers
14
14
  path = path.gsub(File.extname(path), '')
15
15
  path = path.gsub("/", separator)
16
16
 
17
- css_file = File.join(self.class.public, self.class.css_dir, "#{path}.css")
17
+ css_file = File.join(self.class.views, self.class.css_dir, "#{path}.css")
18
18
  sass_file = File.join(self.class.views, self.class.css_dir, "#{path}.css.sass")
19
19
  scss_file = File.join(self.class.views, self.class.css_dir, "#{path}.css.scss")
20
20
  less_file = File.join(self.class.views, self.class.css_dir, "#{path}.css.less")
@@ -0,0 +1,69 @@
1
+ require "yaml"
2
+ require "tilt"
3
+
4
+ module Middleman::Features::FrontMatter
5
+ class << self
6
+ def registered(app)
7
+ app.extend ClassMethods
8
+
9
+ ::Tilt::register MarukuTemplate, 'markdown', 'mkd', 'md'
10
+ ::Tilt::register KramdownTemplate, 'markdown', 'mkd', 'md'
11
+ ::Tilt::register BlueClothTemplate, 'markdown', 'mkd', 'md'
12
+ ::Tilt::register RedcarpetTemplate, 'markdown', 'mkd', 'md'
13
+ ::Tilt::register RDiscountTemplate, 'markdown', 'mkd', 'md'
14
+ ::Tilt::register RedClothTemplate, 'textile'
15
+ end
16
+ alias :included :registered
17
+ end
18
+
19
+ module ClassMethods
20
+ def parse_front_matter(content)
21
+ yaml_regex = /^(---\s*\n.*?\n?)^(---\s*$\n?)/m
22
+ if content =~ yaml_regex
23
+ begin
24
+ data = YAML.load($1)
25
+ rescue => e
26
+ puts "YAML Exception: #{e.message}"
27
+ end
28
+
29
+ content = content.split(yaml_regex).last
30
+ end
31
+
32
+ data ||= {}
33
+ [data, content]
34
+ end
35
+ end
36
+
37
+ module YamlAware
38
+ def prepare
39
+ options, @data = Middleman::Server.parse_front_matter(@data)
40
+ super
41
+ end
42
+ end
43
+
44
+ # MARKDOWN
45
+ class MarukuTemplate < ::Tilt::MarukuTemplate
46
+ include Middleman::Features::FrontMatter::YamlAware
47
+ end
48
+
49
+ class KramdownTemplate < ::Tilt::KramdownTemplate
50
+ include Middleman::Features::FrontMatter::YamlAware
51
+ end
52
+
53
+ class BlueClothTemplate < ::Tilt::BlueClothTemplate
54
+ include Middleman::Features::FrontMatter::YamlAware
55
+ end
56
+
57
+ class RedcarpetTemplate < ::Tilt::RedcarpetTemplate
58
+ include Middleman::Features::FrontMatter::YamlAware
59
+ end
60
+
61
+ class RDiscountTemplate < ::Tilt::RDiscountTemplate
62
+ include Middleman::Features::FrontMatter::YamlAware
63
+ end
64
+
65
+ # TEXTILE
66
+ class RedClothTemplate < ::Tilt::RedClothTemplate
67
+ include Middleman::Features::FrontMatter::YamlAware
68
+ end
69
+ end
@@ -10,11 +10,16 @@ module Middleman::Features::LiveReload
10
10
  end
11
11
 
12
12
  new_config = ::LiveReload::Config.new do |config|
13
- config.exts = ::Tilt.mappings.keys
13
+ ::Tilt.mappings.each do |key, v|
14
+ config.exts << key
15
+ end
14
16
  end
17
+
18
+ pid = fork {
19
+ require 'livereload'
20
+ ::LiveReload.run [Middleman::Server.views], new_config
21
+ }
15
22
 
16
- # Middleman::Server.public
17
- ::LiveReload.run [Middleman::Server.views], new_config
18
23
  end
19
24
  alias :included :registered
20
25
  end
@@ -3,10 +3,10 @@ begin
3
3
  rescue LoadError
4
4
  puts "UglifyJS not available. Install it with: gem install uglifier"
5
5
  end
6
-
6
+
7
7
  module Middleman
8
8
  module Rack
9
-
9
+
10
10
  class MinifyJavascript
11
11
  def initialize(app, options={})
12
12
  @app = app
@@ -14,10 +14,10 @@ module Middleman
14
14
 
15
15
  def call(env)
16
16
  status, headers, response = @app.call(env)
17
-
17
+
18
18
  if env["PATH_INFO"].match(/\.js$/)
19
19
  compressor = ::Uglifier.new
20
-
20
+
21
21
  if response.is_a?(::Rack::File) or response.is_a?(Sinatra::Helpers::StaticFile)
22
22
  uncompressed_source = File.read(response.path)
23
23
  else
@@ -27,10 +27,31 @@ module Middleman
27
27
  headers["Content-Length"] = ::Rack::Utils.bytesize(minified).to_s
28
28
  response = [minified]
29
29
  end
30
-
30
+
31
+ if env["PATH_INFO"].match(/\.html$/)
32
+ compressor = ::Uglifier.new
33
+
34
+ if response.is_a?(::Rack::File) or response.is_a?(Sinatra::Helpers::StaticFile)
35
+ uncompressed_source = File.read(response.path)
36
+ else
37
+ uncompressed_source = response.join
38
+ end
39
+
40
+ minified = uncompressed_source.gsub(/(<scri.*?\/\/<!\[CDATA\[\n)(.*?)(\/\/\]\].*?<\/script>)/m) do |m|
41
+ first = $1
42
+ uncompressed_source = $2
43
+ last = $3
44
+ minified_js = compressor.compile(uncompressed_source)
45
+
46
+ first << minified_js << "\n" << last
47
+ end
48
+ headers["Content-Length"] = ::Rack::Utils.bytesize(minified).to_s
49
+ response = [minified]
50
+ end
51
+
31
52
  [status, headers, response]
32
53
  end
33
54
  end
34
-
55
+
35
56
  end
36
57
  end
@@ -1,4 +1,5 @@
1
1
  require "haml"
2
+ require "coffee-filter"
2
3
 
3
4
  module Middleman
4
5
  module Renderers
@@ -1,6 +1,7 @@
1
1
  require "sass"
2
2
  require "sass/plugin"
3
3
  require "compass"
4
+ require "susy"
4
5
 
5
6
  module Middleman
6
7
  module Renderers
@@ -13,9 +14,9 @@ module Middleman
13
14
  config.project_path = self.root
14
15
  config.sass_dir = File.join(File.basename(self.views), self.css_dir)
15
16
  config.output_style = :nested
16
- config.fonts_dir = File.join(File.basename(self.public), self.fonts_dir)
17
- config.css_dir = File.join(File.basename(self.public), self.css_dir)
18
- config.images_dir = File.join(File.basename(self.public), self.images_dir)
17
+ config.fonts_dir = File.join(File.basename(self.views), self.fonts_dir)
18
+ config.css_dir = File.join(File.basename(self.views), self.css_dir)
19
+ config.images_dir = File.join(File.basename(self.views), self.images_dir)
19
20
  config.http_images_path = self.http_images_path rescue File.join(self.http_prefix || "/", self.images_dir)
20
21
  config.http_stylesheets_path = self.http_css_path rescue File.join(self.http_prefix || "/", self.css_dir)
21
22
  config.asset_cache_buster { false }
@@ -43,7 +44,7 @@ class Tilt::SassPlusCSSFilenameTemplate < Tilt::SassTemplate
43
44
 
44
45
  location_of_sass_file = Middleman::Server.environment == :build ?
45
46
  File.join(Middleman::Server.root, Middleman::Server.build_dir) :
46
- Middleman::Server.public
47
+ Middleman::Server.views
47
48
 
48
49
  parts = basename.split('.')
49
50
  parts.pop
@@ -0,0 +1,12 @@
1
+ module Middleman
2
+ module Renderers
3
+ module Slim
4
+ class << self
5
+ def registered(app)
6
+ require "slim"
7
+ end
8
+ alias :included :registered
9
+ end
10
+ end
11
+ end
12
+ end
@@ -15,8 +15,6 @@ module Middleman
15
15
  set :logging, false
16
16
  set :environment, (ENV['MM_ENV'] && ENV['MM_ENV'].to_sym) || :development
17
17
 
18
- # Import padrino helper methods
19
-
20
18
  # Middleman-specific options
21
19
  set :index_file, "index.html" # What file responds to folder requests
22
20
  # Such as the homepage (/) or subfolders (/about/)
@@ -30,9 +28,14 @@ module Middleman
30
28
  set :build_dir, "build" # Which folder are builds output to
31
29
  set :http_prefix, nil # During build, add a prefix for absolute paths
32
30
 
31
+ set :static, false
32
+ set :views, "source"
33
+
34
+ # Disable Padrino cache buster until explicitly enabled
35
+ set :asset_stamp, false
36
+
33
37
  # Use Padrino Helpers
34
38
  register Padrino::Helpers
35
- set :asset_stamp, false # Disable Padrino cache buster until explicitly enabled
36
39
 
37
40
  # Activate custom features
38
41
  register Middleman::Features
@@ -46,6 +49,8 @@ module Middleman
46
49
  # Activate Webservices Proxy package
47
50
  # register Middleman::Features::Proxy
48
51
 
52
+ register Middleman::Features::FrontMatter
53
+
49
54
  # Activate Lorem helpers
50
55
  register Middleman::Features::Lorem
51
56
 
@@ -70,6 +75,7 @@ module Middleman
70
75
  end
71
76
 
72
77
  # Activate custom renderers
78
+ register Middleman::Renderers::Slim
73
79
  register Middleman::Renderers::Haml
74
80
  register Middleman::Renderers::Sass
75
81
 
@@ -140,11 +146,27 @@ module Middleman
140
146
  # Normalize the path and add index if we're looking at a directory
141
147
  path = self.class.path_to_index(request.path)
142
148
 
143
- static_path = File.join(Middleman::Server.public, path)
144
- # if File.exists? static_path
145
- # send_file static_path
146
- # return
147
- # end
149
+ extensionless_path, template_engine = resolve_template(path)
150
+
151
+ if !::Tilt.mappings.has_key?(template_engine.to_s)
152
+ content_type mime_type(File.extname(path)), :charset => 'utf-8'
153
+ status 200
154
+ send_file File.join(Middleman::Server.views, path)
155
+ return
156
+ end
157
+
158
+ full_file_path = "#{extensionless_path}.#{template_engine}"
159
+ system_path = File.join(settings.views, full_file_path)
160
+ data, content = self.class.parse_front_matter(File.read(system_path))
161
+
162
+ %w(layout layout_engine).each do |opt|
163
+ if data.has_key?(opt)
164
+ options[opt.to_sym] = data.delete(opt)
165
+ end
166
+ end
167
+
168
+ # Forward remaining data to helpers
169
+ self.class.data_content("page", data)
148
170
 
149
171
  old_layout = settings.current_layout
150
172
  settings.layout(options[:layout]) if !options[:layout].nil?
@@ -182,9 +204,6 @@ class Middleman::Server
182
204
  Middleman::Server.class_eval File.read(local_config)
183
205
  set :app_file, File.expand_path(local_config)
184
206
  end
185
-
186
- use ::Rack::ConditionalGet
187
- use ::Rack::Static, :urls => ["/#{self.images_dir}"], :root => "public"
188
207
 
189
208
  @@run_after_features.each { |block| class_eval(&block) }
190
209