# Escapes html string.
#
def h( str )
  Rack::Utils.escape_html(str.to_s)
end

# Displays text only first time the helper is called in this request
# Usage:
#   render_once "hello, world"
# Or:
#   render_once :hello_message, "hello, world"
#
def render_once( *args )
  @render_once_hash ||= {}
  if Symbol === args.first
    key = args.shift
    text = args.shift
  else
    key = args.shift
    text = key
  end
  return '' if @render_once_hash.key? key
  @render_once_hash[key] = true
  text
end

# Renders erb template.
#
def view( name, opts = {} )
  ts = Time.now
  default_opts = {}
  default_opts[:layout] = :"layouts/#{layout}.html" if layout.present?
  #if settings.development?
    erb( "#{name}.html".to_sym, default_opts.merge(opts) )+( "<!-- %s: %.3fs -->" % [name, Time.now - ts] )
  #else
  #  erb( "#{name}.html".to_sym, default_opts.merge(opts) )
  #end
end

# Renders partial erb template.
#
def partial( name, opts = {} )
  if opts.key?( :cacheable ) && config.aerogel.cache.enabled?
    Aerogel::Cache.cacheable current_locale, name, opts[:cacheable] do |key|
      __uncached_partial( name, opts )+"<!-- cache #{key} @ #{Time.now} -->"
    end
  else
    __uncached_partial( name, opts )
  end
end

def __uncached_partial( name, opts = {} )
  name_parts = name.to_s.split('/')
  partial_name = name_parts[-1]
  name_parts[-1] = '_'+partial_name+".html"
  template_name = name_parts.join('/').to_sym
  opts[:layout] = false

  # render single template
  unless opts.key? :collection
    return erb template_name, opts
  end

  # render collection
  out = ""
  opts[:locals] ||= {}
  opts[:collection].each do |object|
    opts[:locals][partial_name.to_sym] = object
    out += opts[:delimiter] if opts[:delimiter].present? && out.present?
    out += erb template_name, opts.except( :collection, :delimiter, :cacheable )
  end
  out
end

# Sets/gets page title.
#
# Example:
#   page_title "Home page" # sets page title
#   page_title # => "Home page"
#
# Or in views:
#  <% page_title "Home page" %> # sets page title
#  <%= page_title %> # gets page title
#
def page_title( value = nil )
  @page_title = value unless value.nil?
  @page_title
end

# Sets/gets current layout.
#
def layout( value = nil )
  @layout = value unless value.nil?
  @layout
end