From 212855918657fade5b26059926e6ebf7f966c2b4 Mon Sep 17 00:00:00 2001 From: risk Date: Mon, 8 Aug 2011 15:43:21 -0700 Subject: [PATCH] fix edge case where sanitize gem doesn't operate on node if the custom transformer runs --- lib/gollum/sanitization.rb | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/lib/gollum/sanitization.rb b/lib/gollum/sanitization.rb index b5867042..9a3e2c2b 100644 --- a/lib/gollum/sanitization.rb +++ b/lib/gollum/sanitization.rb @@ -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