Module: SC::Helpers::TagHelper

Includes:
ERB::Util
Included in:
Builder::Html
Defined in:
lib/sproutcore/helpers/tag_helper.rb

Overview

Use these methods to generate HTML tags programmatically when you can’t use a Builder. By default, they output XHTML compliant tags.

Instance Method Summary collapse

Instance Method Details

#cdata_section(content) ⇒ Object

Returns a CDATA section with the given content. CDATA sections are used to escape blocks of text containing characters which would otherwise be recognized as markup. CDATA sections begin with the string <![CDATA[ and end with (and may not contain) the string ]]>.

cdata_section("<hello world>")
 # => <![CDATA[<hello world>]]>


75
76
77
# File 'lib/sproutcore/helpers/tag_helper.rb', line 75

def cdata_section(content)
  "<![CDATA[#{content}]]>"
end

#content_tag(name, content_or_options_with_block = nil, options = nil, &block) ⇒ Object

Returns an HTML block tag of type name surrounding the content. Add HTML attributes by passing an attributes hash to options. For attributes with no value like (disabled and readonly), give it a value of true in the options hash. You can use symbols or strings for the attribute names.

(:p, "Hello world!")
 # => <p>Hello world!</p>
(:div, (:p, "Hello world!"), :class => "strong")
 # => <div class="strong"><p>Hello world!</p></div>
("select", options, :multiple => true)
 # => <select multiple="multiple">...options...</select>

Instead of passing the content as an argument, you can also use a block in which case, you pass your options as the second parameter.

<% content_tag :div, :class => "strong" do -%>
  Hello world!
<% end -%>
 # => <div class="strong"><p>Hello world!</p></div>


56
57
58
59
60
61
62
63
64
65
66
# File 'lib/sproutcore/helpers/tag_helper.rb', line 56

def (name, content_or_options_with_block = nil, options = nil, &block)
  if block_given?
    options = content_or_options_with_block if content_or_options_with_block.is_a?(Hash)
    content = capture(&block)
     = (name, content, options)
    block_is_within_action_view?(block) ? concat(, block.binding) : 
  else
    content = content_or_options_with_block
    (name, content, options)
  end
end

#escape_once(html) ⇒ Object

Returns the escaped html without affecting existing escaped entities.

escape_once("1 > 2 &amp; 3")
 # => "1 &lt; 2 &amp; 3"


83
84
85
# File 'lib/sproutcore/helpers/tag_helper.rb', line 83

def escape_once(html)
  fix_double_escape(html_escape(html.to_s))
end

Simple link_to can wrap a passed string with a link to a specified target or static asset. If you pass a block then the block will be invoked and its resulting content linked. You can also pass :popup, :title, :id, :class, and :style



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# File 'lib/sproutcore/helpers/tag_helper.rb', line 91

def link_to(content, opts=nil, &block)
  if block_given?
    concat(link_to(capture(&block), content), block.binding);
    return ''
  end

  if !content.instance_of?(String) && opts.nil?
    opts = content
    content = nil
  end
  
  opts = { :href => opts } if opts.instance_of? String
  opts = HashStruct.new(opts)
  html_attrs = HashStruct.new
  is_target = false
  
  if opts.href
    html_attrs.href = opts.href
  elsif opts.target

    is_target = (target.target_name.to_sym == "/#{opts.target.to_s}".to_sym)

    # supply title if needed
    if content.nil?
      cur_target = is_target ? target : target.target_for(opts.target)
      content = title(cur_target) if cur_target
      content = opts.target if content.nil?
    end
              
    # if current==false, then don't link if current target matches
    if !opts.current.nil? && (opts.current==false) && is_target
      return %(<span class="anchor current">#{content}</span>)
    end

    html_attrs.href = sc_target(opts.target, :language => opts.language)
  elsif opts.static
    html_attrs.href = sc_static(opts.static, :language => opts.language)
  end
  
  if opts.popup
    popup = opts.popup
    html_attrs.target = popup.instance_of?(String) ? popup : '_blank'
  end
  
  %w[title id class style].each do |key|
    html_attrs[key] = opts[key] if opts[key]
  end
  
  # add "current" class name
  if is_target
    html_attrs[:class] = [html_attrs[:class], 'current'].compact.join(' ')
  end
  
  ret = ["<a "]
  html_attrs.each { |k,v| ret << [k,'=','"',v,'" '].join('') }
  ret << '>'
  ret << content
  ret << '</a>'
  return ret.join('')
end

#tag(name, options = nil, open = false) ⇒ Object

Returns an empty HTML tag of type name which by default is XHTML compliant. Setting open to true will create an open tag compatible with HTML 4.0 and below. Add HTML attributes by passing an attributes hash to options. For attributes with no value like (disabled and readonly), give it a value of true in the options hash. You can use symbols or strings for the attribute names.

tag("br")
 # => <br />
tag("br", nil, true)
 # => <br>
tag("input", { :type => 'text', :disabled => true })
 # => <input type="text" disabled="disabled" />


33
34
35
# File 'lib/sproutcore/helpers/tag_helper.rb', line 33

def tag(name, options = nil, open = false)
  "<#{name}#{tag_options(options) if options}" + (open ? ">" : " />")
end