fix edge case where sanitize gem doesn't operate on <a> node if the custom transformer runs

This commit is contained in:
risk
2011-08-08 15:43:21 -07:00
parent 20e4ca6a56
commit 2128559186
+16 -7
View File
@@ -47,27 +47,36 @@ module Gollum
'img' => {'src' => ['http', 'https', :relative]}
}.freeze
# Default transformers to force @id attributes with 'wiki-' prefix
ADD_ATTRIBUTES = lambda do |env, node|
if add = env[:config][:add_attributes][node.name]
add.each do |key, value|
node[key] = value
end
end
end
# Default transformers to force @id attributes with 'wiki-' prefix
TRANSFORMERS = [
lambda do |env|
node = env[:node]
return if env[:is_whitelisted] || !node.element?
prefix = env[:config][:id_prefix]
%w(id name).each do |key|
found_attrs = %w(id name).select do |key|
if value = node[key]
node[key] = value.gsub(/\A(#{prefix})?/, prefix)
end
end
{:node_whitelist => [node]}
if found_attrs.size > 0
ADD_ATTRIBUTES.call(env, node)
{:node_whitelist => [node]}
end
end,
lambda do |env|
node = env[:node]
return unless node['href']
return unless value = node['href']
prefix = env[:config][:id_prefix]
node['href'] = node['href'].gsub(/\A\#(#{prefix})?/, '#'+prefix)
node['href'] = value.gsub(/\A\#(#{prefix})?/, '#'+prefix)
ADD_ATTRIBUTES.call(env, node)
{:node_whitelist => [node]}
end
].freeze