if defined?(ActionView) and not defined?(Merb::Plugins) module ActionView class Base # :nodoc: def render_with_haml(*args, &block) was_haml = is_haml? @haml_is_haml = false res = render_without_haml(*args, &block) @haml_is_haml = was_haml res end alias_method :render_without_haml, :render alias_method :render, :render_with_haml end # This overrides various helpers in ActionView # to make them work more effectively with Haml. module Helpers # :stopdoc: module CaptureHelper def capture_erb_with_buffer_with_haml(*args, &block) if is_haml? capture_haml_with_buffer(*args, &block) else capture_erb_with_buffer_without_haml(*args, &block) end end alias_method :capture_erb_with_buffer_without_haml, :capture_erb_with_buffer alias_method :capture_erb_with_buffer, :capture_erb_with_buffer_with_haml end module TextHelper def concat_with_haml(string, binding = nil) if is_haml? buffer.buffer.concat(string) else concat_without_haml(string, binding) end end alias_method :concat_without_haml, :concat alias_method :concat, :concat_with_haml end module FormTagHelper def form_tag_with_haml(url_for_options = {}, options = {}, *parameters_for_url, &proc) if is_haml? if block_given? oldproc = proc proc = bind_proc do |*args| concat "\n" tab_up oldproc.call(*args) tab_down end end res = form_tag_without_haml(url_for_options, options, *parameters_for_url, &proc) + "\n" concat "\n" if block_given? && is_haml? res else form_tag_without_haml(url_for_options, options, *parameters_for_url, &proc) end end alias_method :form_tag_without_haml, :form_tag alias_method :form_tag, :form_tag_with_haml end module FormHelper def form_for_with_haml(object_name, *args, &proc) if block_given? && is_haml? oldproc = proc proc = bind_proc do |*args| tab_up oldproc.call(*args) tab_down end end form_for_without_haml(object_name, *args, &proc) concat "\n" if block_given? && is_haml? end alias_method :form_for_without_haml, :form_for alias_method :form_for, :form_for_with_haml end # :startdoc: end end end