Module: Eggshell::BlockHandler::HtmlUtils

Overview

Useful methods for generating HTML tags

Constant Summary collapse

HASH_HTML_ESCAPE =
{
	"'" => ''',
	'"' => '"',
	'<' => '&lt;',
	'>' => '&gt;',
	'&' => '&amp;'
}.freeze

Instance Method Summary collapse

Instance Method Details

#attrib_string(map, keys = nil) ⇒ Object



177
178
179
180
181
182
183
184
185
186
187
188
189
# File 'lib/eggshell/block-handler.rb', line 177

def attrib_string(map, keys = nil)
	keys = map.keys if !keys
	buff = []
	keys.each do |key|
		val = map[key]
		if val.is_a?(Hash)
			buff << attrib_string(val)
		elsif val && key[0] != '@'
			buff << " #{key}='#{html_escape(val)}'"
		end
	end
	buff.join()
end

#create_tag(tag, attribs, open = true, body = nil) ⇒ Object



154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# File 'lib/eggshell/block-handler.rb', line 154

def create_tag(tag, attribs, open = true, body = nil)
	str_attribs = ''
	if attribs.is_a?(String)
		str_attribs = attribs
	else
		nattribs = attribs.is_a?(Hash) ? attribs.clone : {}
		if nattribs[BlockParams::STYLE].is_a?(Hash)
			nattribs[BlockParams::STYLE] = css_string(nattribs[BlockParams::STYLE])
		end
		str_attribs = attrib_string(nattribs, BlockParams::KEYS)
	end

	if !open
		return "<#{tag}#{str_attribs}/>"
	else
		if body
			return "<#{tag}#{str_attribs}>#{body}</#{tag}>"
		else
			return "<#{tag}#{str_attribs}>"
		end
	end
end

#css_string(map) ⇒ Object



211
212
213
214
215
216
217
# File 'lib/eggshell/block-handler.rb', line 211

def css_string(map)
	css = []
	map.each do |s,v|
		css << "#{s}: #{html_escape(v)};"
	end
	css.join(' ')
end

#html_escape(str) ⇒ Object



228
229
230
# File 'lib/eggshell/block-handler.rb', line 228

def html_escape(str)
	return str.gsub(/("|'|<|>|&)/, HASH_HTML_ESCAPE)
end

#inject_attribs(attribs, map = {}, escape = true) ⇒ Object

Given an attribute string in the form ‘key1=“value” key2=“value”` and a map containing new attribute keys, either append to attribute string or inject values into an existing attribute.

Parameters:

  • String

    attribs

  • Hash

    map

  • Boolean

    escape If true (default), calls html_escape() on each value.



197
198
199
200
201
202
203
204
205
206
207
208
209
# File 'lib/eggshell/block-handler.rb', line 197

def inject_attribs(attribs, map = {}, escape = true)
	map.each do |key, val|
		key = key.to_s if key.is_a?(Symbol)
		olen = attribs.length
		match = attribs.match(/#{key}=(['"])([^'"]*)(['"])/)
		if !match
			attribs += " #{key}='#{escape ? html_escape(val) : val}'"
		else
			attribs = attribs.gsub(match[0], "#{key}='#{match[2]} #{escape ? html_escape(val) : val}'")
		end
	end
	attribs
end