fix edge case where sanitize gem doesn't operate on <a> node if the custom transformer runs
This commit is contained in:
@@ -47,27 +47,36 @@ module Gollum
|
|||||||
'img' => {'src' => ['http', 'https', :relative]}
|
'img' => {'src' => ['http', 'https', :relative]}
|
||||||
}.freeze
|
}.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 = [
|
TRANSFORMERS = [
|
||||||
lambda do |env|
|
lambda do |env|
|
||||||
node = env[:node]
|
node = env[:node]
|
||||||
return if env[:is_whitelisted] || !node.element?
|
return if env[:is_whitelisted] || !node.element?
|
||||||
prefix = env[:config][:id_prefix]
|
prefix = env[:config][:id_prefix]
|
||||||
%w(id name).each do |key|
|
found_attrs = %w(id name).select do |key|
|
||||||
if value = node[key]
|
if value = node[key]
|
||||||
node[key] = value.gsub(/\A(#{prefix})?/, prefix)
|
node[key] = value.gsub(/\A(#{prefix})?/, prefix)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if found_attrs.size > 0
|
||||||
|
ADD_ATTRIBUTES.call(env, node)
|
||||||
{:node_whitelist => [node]}
|
{:node_whitelist => [node]}
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
lambda do |env|
|
lambda do |env|
|
||||||
node = env[:node]
|
node = env[:node]
|
||||||
return unless node['href']
|
return unless value = node['href']
|
||||||
prefix = env[:config][:id_prefix]
|
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]}
|
{:node_whitelist => [node]}
|
||||||
end
|
end
|
||||||
].freeze
|
].freeze
|
||||||
|
|||||||
Reference in New Issue
Block a user