module Padrino::Helpers::AssetTagHelpers

def flash_tag(kind, options={})


flash_tag(:notice, :class => 'flash', :id => 'flash-notice')

==== Examples

Creates a div to display the flash of given type if it exists
#
def flash_tag(kind, options={})
  flash_text = flash[kind]
  return '' if flash_text.blank?
  options.reverse_merge!(:class => 'flash')
  content_tag(:div, flash_text, options)
end

def image_path(src)


image_path("foo.jpg") => "yourapp/public/images/foo.jpg"

==== Examples

like app/public/images for inclusion. You can provide also a full path.
Returns the path to the image, either relative or absolute. We search it in your +appname.public+
#
def image_path(src)
  src.gsub!(/\s/, '')
  src =~ %r{^\s*(/|http)} ? src : uri_root_path('images', src)
end

def image_tag(url, options={})


image_tag('icons/avatar.png')

==== Examples

Creates an image element with given url and options
#
def image_tag(url, options={})
  options.reverse_merge!(:src => image_path(url))
  tag(:img, options)
end

def javascript_include_tag(*sources)


javascript_include_tag 'application', :extjs

==== Examples

like app/public/javascript for inclusion. You can provide also a full path.
You can pass in the filename without extension or a symbol and we search it in your +appname.public+
Returns an html script tag for each of the sources provided.
#
def javascript_include_tag(*sources)
  options = sources.extract_options!.symbolize_keys
  sources.collect { |script| javascript_tag(script, options) }.join("\n")
end

def javascript_path(source)


Returns the javascript_path appending the default javascripts path if necessary
#
def javascript_path(source)
  return source if source =~ /^http/
  source        = source.to_s.gsub(/\.js$/, '')
  source_name   = source; source_name << ".js" unless source =~ /\.js/
  result_path   = source_name if source =~ %r{^/} # absolute path
  result_path ||= uri_root_path("javascripts", source_name)
  return result_path if result_path =~ /\?/
  public_path = Padrino.root("public", result_path)
  stamp = File.exist?(public_path) ? File.mtime(public_path).to_i : Time.now.to_i
  "#{result_path}?#{stamp}"
end

def javascript_tag(source, options={})


javascript_tag 'application', :src => '/javascripts/base/application.js'

==== Examples

Generate a link +script+ for javascript.
#
def javascript_tag(source, options={})
  options = options.dup.reverse_merge!(:src => javascript_path(source), :type => 'text/javascript', :content => "")
  tag(:script, options)
end

def link_to(*args, &block)


condition padrino return true/false if the request.path_info match the given url
Note that you can pass :+if+ or :+unless+ conditions, but if you provide :current as

link_to('/dashboard', :class => 'blocky') do ... end
link_to 'click me', '/dashboard', :unless => :current
link_to 'click me', '/dashboard', :unless => @foo.empty?
link_to 'click me', '/dashboard', :if => @foo.present?
link_to 'click me', '/dashboard', :class => 'linky'

==== Examples

Creates a link element with given name, url and options
#
def link_to(*args, &block)
  options = args.extract_options!
  anchor  = "##{CGI.escape options.delete(:anchor).to_s}" if options[:anchor]
  options["data-remote"] = "true" if options.delete(:remote)
  if block_given?
    url = args[0] ? args[0] + anchor.to_s : anchor || 'javascript:void(0);'
    options.reverse_merge!(:href => url)
    link_content = capture_html(&block)
    return name unless parse_conditions(url, options)
    result_link = content_tag(:a, link_content, options)
    block_is_template?(block) ? concat_content(result_link) : result_link
  else
    name, url = args[0], (args[1] ? args[1] + anchor.to_s : anchor || 'javascript:void(0);')
    return name unless parse_conditions(url, options)
    options.reverse_merge!(:href => url)
    content_tag(:a, name, options)
  end
end

def mail_to(email, caption=nil, mail_options={})


mail_to "me@demo.com", "My Email" => My Email
mail_to "me@demo.com" => me@demo.com
==== Examples

Creates a mail link element with given name and caption
#
def mail_to(email, caption=nil, mail_options={})
  html_options = mail_options.slice!(:cc, :bcc, :subject, :body)
  mail_query = Rack::Utils.build_query(mail_options).gsub(/\+/, '%20').gsub('%40', '@')
  mail_href = "mailto:#{email}"; mail_href << "?#{mail_query}" if mail_query.present?
  link_to (caption || email), mail_href, html_options
end

def meta_tag(content, options={})


meta_tag "text/html; charset=UTF-8", :http-equiv => "Content-Type" =>
meta_tag "weblog,news", :name => "keywords" =>

==== Examples

Creates a meta element with the content and given options
#
def meta_tag(content, options={})
  options.reverse_merge!("content" => content)
  tag(:meta, options)
end

def parse_conditions(url, options)


Parse link_to options for give correct conditions
#
def parse_conditions(url, options)
  if options.has_key?(:if)
    condition = options.delete(:if)
    condition == :current ? url == request.path_info : condition
  elsif condition = options.delete(:unless)
    condition == :current ? url != request.path_info : !condition
  else
    true
  end
end

def stylesheet_link_tag(*sources)


stylesheet_link_tag 'style', 'application', 'layout'

==== Examples

like app/public/stylesheets for inclusion. You can provide also a full path.
You can pass in the filename without extension or a symbol and we search it in your +appname.public+
Returns an html script tag for each of the sources provided.
#
def stylesheet_link_tag(*sources)
  options = sources.extract_options!.symbolize_keys
  sources.collect { |sheet| stylesheet_tag(sheet, options) }.join("\n")
end

def stylesheet_path(source)


Returns the stylesheet_path appending the default stylesheets path if necessary
#
def stylesheet_path(source)
  return source if source =~ /^http/
  source        = source.to_s.gsub(/\.css$/, '')
  source_name   = source; source_name << ".css" unless source =~ /\.css/
  result_path   = source_name if source =~ %r{^/} # absolute path
  result_path ||= uri_root_path("stylesheets", source_name)
  return result_path if result_path =~ /\?/
  public_path   = Padrino.root("public", result_path)
  stamp         = File.exist?(public_path) ? File.mtime(public_path).to_i : Time.now.to_i
  "#{result_path}?#{stamp}"
end

def stylesheet_tag(source, options={})


stylesheet_tag('style', :media => 'screen')

==== Examples

Generate a +link+ tag for stylesheet.
#
def stylesheet_tag(source, options={})
  options = options.dup.reverse_merge!(:href => stylesheet_path(source), :media => 'screen', :rel => 'stylesheet', :type => 'text/css')
  tag(:link, options)
end

def uri_root_path(*paths)


Returns the uri root of the application.'
#
def uri_root_path(*paths)
  root_uri = self.class.uri_root if self.class.respond_to?(:uri_root)
  File.join(root_uri || '/', *paths)
end