diff --git a/lib/middleman.rb b/lib/middleman.rb
index de95d478..e9b82605 100644
--- a/lib/middleman.rb
+++ b/lib/middleman.rb
@@ -55,6 +55,9 @@ class Middleman < Sinatra::Base
end
end
+ # include helpers
+ class_eval File.read(File.join(File.dirname(__FILE__), 'middleman', 'helpers.rb'))
+
# Check for local config
local_config = File.join(self.root, "init.rb")
if File.exists? local_config
diff --git a/lib/middleman/helpers.rb b/lib/middleman/helpers.rb
index 2d59cc5d..52353a8a 100644
--- a/lib/middleman/helpers.rb
+++ b/lib/middleman/helpers.rb
@@ -1,41 +1,53 @@
-Middleman.helpers do
- def link_to(title, url="#", params={})
- params.merge!(:href => url)
- params = params.map { |k,v| %Q{#{k}="#{v}"}}.join(' ')
- %Q{#{title}}
- end
-
- def page_classes(*additional)
- classes = []
- parts = @full_request_path.split('.')[0].split('/')
- parts.each_with_index { |path, i| classes << parts.first(i+1).join('_') }
-
- classes << "index" if classes.empty?
- classes += additional unless additional.empty?
- classes.join(' ')
- end
-
- def asset_url(path)
- path.include?("://") ? path : "/#{path}"
- end
-
- def image_tag(path, options={})
- options[:alt] ||= ""
- capture_haml do
- haml_tag :img, options.merge(:src => asset_url(path))
- end
- end
-
- def javascript_include_tag(path, options={})
- capture_haml do
- haml_tag :script, options.merge(:src => asset_url(path), :type => "text/javascript")
- end
- end
-
- def stylesheet_link_tag(path, options={})
- options[:rel] ||= "stylesheet"
- capture_haml do
- haml_tag :link, options.merge(:href => asset_url(path), :type => "text/css")
- end
+def link_to(title, url="#", params={})
+ params.merge!(:href => url)
+ params = params.map { |k,v| %Q{#{k}="#{v}"}}.join(' ')
+ %Q{#{title}}
+end
+
+def page_classes(*additional)
+ classes = []
+ parts = @full_request_path.split('.')[0].split('/')
+ parts.each_with_index { |path, i| classes << parts.first(i+1).join('_') }
+
+ classes << "index" if classes.empty?
+ classes += additional unless additional.empty?
+ classes.join(' ')
+end
+
+def haml_partial(name, options = {})
+ item_name = name.to_sym
+ counter_name = "#{name}_counter".to_sym
+ if collection = options.delete(:collection)
+ collection.enum_for(:each_with_index).collect do |item,index|
+ haml_partial name, options.merge(:locals => {item_name => item, counter_name => index+1})
+ end.join
+ elsif object = options.delete(:object)
+ haml_partial name, options.merge(:locals => {item_name => object, counter_name => nil})
+ else
+ haml "_#{name}".to_sym, options.merge(:layout => false)
end
end
+
+def asset_url(path)
+ path.include?("://") ? path : "/#{path}"
+end
+
+def image_tag(path, options={})
+ options[:alt] ||= ""
+ capture_haml do
+ haml_tag :img, options.merge(:src => asset_url(path))
+ end
+end
+
+def javascript_include_tag(path, options={})
+ capture_haml do
+ haml_tag :script, options.merge(:src => asset_url(path), :type => "text/javascript")
+ end
+end
+
+def stylesheet_link_tag(path, options={})
+ options[:rel] ||= "stylesheet"
+ capture_haml do
+ haml_tag :link, options.merge(:href => asset_url(path), :type => "text/css")
+ end
+end
\ No newline at end of file