module Sunrise
module Views
module Helpers
def title(content)
content_for(:title) { content } unless content.blank?
end
def javascript(*args)
content_for(:head) { javascript_include_tag(*args) }
end
def stylesheet(*args)
content_for(:head) { stylesheet_link_tag(*args) }
end
def description(content)
content_for(:description) { tag(:meta, :content=>content, :name=>"description") } unless content.blank?
end
def keywords(content)
content_for(:keywords) { tag(:meta, :content=>content, :name=>"keywords") } unless content.blank?
end
def render_title
@page_title || I18n.t("page.title")
end
def render_keywords
@page_keywords || I18n.t("page.keywords")
end
def render_description
@page_description || I18n.t("page.description")
end
def anchor_to(name, options={})
return if name.blank?
options[:name] = name
content_tag(:a, '', options)
end
def link_by_href(name, options={})
link_to name, name, options
end
def link_to_unless_current_span(name, options = {}, html_options = {}, &block)
link_to_unless_span current_page?(options), name, options, html_options, &block
end
def link_to_unless_span(condition, name, options = {}, html_options = {}, &block)
if condition
if block_given?
block.arity <= 1 ? yield(name) : yield(name, options, html_options)
else
content_tag(:span, name, html_options)
end
else
link_to(name, options, html_options)
end
end
def link_to_unless_current_tag(name, options = {}, html_options = {}, &block)
link_to_unless_tag current_page?(options), name, options, html_options, &block
end
def link_to_if_tag(condition, name, options = {}, html_options = {}, &block)
tag_name = html_options.delete(:tag) || :span
if condition
link_to(name, options, html_options)
else
if block_given?
block.arity <= 1 ? yield(name) : yield(name, options, html_options)
else
content_tag(tag_name, name, html_options)
end
end
end
def link_to_unless_tag(condition, name, options = {}, html_options = {}, &block)
tag_name = html_options.delete(:tag) || :span
unless condition
link_to(name, options, html_options)
else
if block_given?
block.arity <= 1 ? yield(name) : yield(name, options, html_options)
else
content_tag(tag_name, name, html_options)
end
end
end
def link_to_remote_if(condition, name, options = {}, html_options = nil)
return name unless condition
link_to_function(name, remote_function(options), html_options || options.delete(:html))
end
def submit_image(name, src, options={})
html_options = options.dup.symbolize_keys
html_options[:name] = name
html_options[:src] = src
html_options[:type] ||= 'image'
tag(:input, html_options)
end
def submit_image_to_remote(name, value, options = {})
options[:with] ||= 'Form.serialize(this.form)'
html_options = options.delete(:html) || {}
html_options[:name] = name
html_options[:type] ||= 'button'
onclick = html_options.delete(:onclick) || remote_function(options)
tag(:input, html_options.merge(:value => name, :onclick => onclick))
end
def locale_image_tag(source, options = {})
source = "#{I18n.locale}/#{source}"
image_tag(source, options)
end
# swf_object
def swf_object(swf, id, width, height, flash_version, options = {})
options.symbolize_keys!
params = options.delete(:params) || {}
attributes = options.delete(:attributes) || {}
flashvars = options.delete(:flashvars) || {}
attributes[:classid] ||= "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
attributes[:id] ||= id
attributes[:name] ||= id
output_buffer = ActiveSupport::SafeBuffer.new
if options[:create_div]
output_buffer << content_tag(:div,
"This website requires Flash player #{flash_version} or higher.",
:id => id)
end
js = []
js << "var params = {#{params.to_a.map{|item| "#{item[0]}:'#{item[1]}'" }.join(',')}};"
js << "var attributes = {#{attributes.to_a.map{|item| "#{item[0]}:'#{item[1]}'" }.join(',')}};"
js << "var flashvars = {#{flashvars.to_a.map{|item| "#{item[0]}:'#{item[1]}'" }.join(',')}};"
js << "swfobject.embedSWF('#{swf}', '#{id}', '#{width}', '#{height}', '#{flash_version}', '/swf/expressInstall.swf', flashvars, params, attributes);"
output_buffer << javascript_tag(js.join)
output_buffer
end
def encode_email(email_address, options = {})
email_address = email_address.to_s
string = ''
"document.write('#{email_address}');".each_byte do |c|
string << sprintf("%%%x", c)
end
""
end
def record_asset_tag(record, method_name, default_image, options = {})
asset = record ? record.send(method_name) : nil
asset_type = options.has_key?(:type) ? options.delete(:type).to_sym : nil
extname = File.extname(default_image)
image_path = asset_type.nil? ? default_image : "#{File.basename(default_image, extname)}_#{asset_type}#{extname}"
image_full = default_image.gsub(File.basename(default_image), image_path)
path = (asset && (asset.respond_to?(:persisted?) ? asset.persisted? : true)) ? asset.url(asset_type) : image_full
image_tag(path, options)
end
def manage_form_for(object, *args, &block)
options = args.extract_options!
options[:builder] ||= Sunrise::Views::FormBuilder
simple_form_for([:manage, object].flatten, *(args << options), &block)
end
end
end
end