Permalink
Browse files

allow @id attributes but force a "wiki-" prefix

  • Loading branch information...
1 parent 748d76d commit c22050fca8582de413f834f92782e1e525ee9507 @schuyler1d schuyler1d committed May 4, 2011
Showing with 45 additions and 1 deletion.
  1. +31 −1 lib/gollum/sanitization.rb
  2. +14 −0 test/test_markup.rb
View
32 lib/gollum/sanitization.rb
@@ -47,6 +47,25 @@ class Sanitization
'img' => {'src' => ['http', 'https', :relative]}
}.freeze
+ # Default transformers to force @id attributes with 'wiki-' prefix
+
+ TRANSFORMERS = [
+ lambda do |env|
+ node = env[:node]
+ return if env[:is_whitelisted] || !node.element? || !node['id']
+ prefix = env[:config][:id_prefix]
+ node['id'] = node['id'].gsub(/\A(#{prefix})?/, prefix)
+
+ {:node_whitelist => [node]}
+ end,
+ lambda do |env|
+ node = env[:node]
+ return unless node['href']
+ prefix = env[:config][:id_prefix]
+ node['href'] = node['href'].gsub(/\A\#(#{prefix})?/, '#'+prefix)
+ end
+ ].freeze
+
# Gets an Array of whitelisted HTML elements. Default: ELEMENTS.
attr_reader :elements
@@ -58,6 +77,13 @@ class Sanitization
# attributes. Default: PROTOCOLS
attr_reader :protocols
+ # Gets a Hash describing which URI protocols are allowed in HTML
+ # attributes. Default: TRANSFORMERS
+ attr_reader :transformers
+
+ # Gets a String prefix which is added to ID attributes. Default: 'wiki-'
+ attr_reader :id_prefix
+
# Gets a Hash describing HTML attributes that Sanitize should add.
# Default: {}
attr_reader :add_attributes
@@ -70,8 +96,10 @@ def initialize
@elements = ELEMENTS
@attributes = ATTRIBUTES
@protocols = PROTOCOLS
+ @transformers = TRANSFORMERS
@add_attributes = {}
@allow_comments = false
+ @id_prefix = 'wiki-'
yield self if block_given?
end
@@ -100,7 +128,9 @@ def to_hash
:attributes => attributes,
:protocols => protocols,
:add_attributes => add_attributes,
- :allow_comments => allow_comments?
+ :allow_comments => allow_comments?,
+ :transformers => transformers,
+ :id_prefix => id_prefix
}
end
View
14 test/test_markup.rb
@@ -467,6 +467,20 @@
compare(content, output, 'org')
end
+ test "id with prefix ok" do
+ content = "h2(example#wiki-foo). xxxx"
+ output = %(<h2 class="example" id="wiki-foo">xxxx</h2>)
+ compare(content, output, :textile)
+ end
+
+ test "id prefix added" do
+ content = "h2(#foo). xxxx[1]\n\nfn1.footnote"
+ output = "<h2 id=\"wiki-foo\">xxxx" +
+ "<sup class=\"footnote\"><a href=\"#wiki-fn1\">1</a></sup></h2>" +
+ "\n<p class=\"footnote\" id=\"wiki-fn1\"><sup>1</sup> footnote</p>"
+ compare(content, output, :textile)
+ end
+
#########################################################################
#
# TeX

0 comments on commit c22050f

Please sign in to comment.