Merge pull request #146 from schuyler1d/master
allow prefixed @id attributes to allow internal linking
This commit is contained in:
@@ -47,6 +47,25 @@ module Gollum
|
|||||||
'img' => {'src' => ['http', 'https', :relative]}
|
'img' => {'src' => ['http', 'https', :relative]}
|
||||||
}.freeze
|
}.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.
|
# Gets an Array of whitelisted HTML elements. Default: ELEMENTS.
|
||||||
attr_reader :elements
|
attr_reader :elements
|
||||||
|
|
||||||
@@ -58,6 +77,13 @@ module Gollum
|
|||||||
# attributes. Default: PROTOCOLS
|
# attributes. Default: PROTOCOLS
|
||||||
attr_reader :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.
|
# Gets a Hash describing HTML attributes that Sanitize should add.
|
||||||
# Default: {}
|
# Default: {}
|
||||||
attr_reader :add_attributes
|
attr_reader :add_attributes
|
||||||
@@ -70,8 +96,10 @@ module Gollum
|
|||||||
@elements = ELEMENTS
|
@elements = ELEMENTS
|
||||||
@attributes = ATTRIBUTES
|
@attributes = ATTRIBUTES
|
||||||
@protocols = PROTOCOLS
|
@protocols = PROTOCOLS
|
||||||
|
@transformers = TRANSFORMERS
|
||||||
@add_attributes = {}
|
@add_attributes = {}
|
||||||
@allow_comments = false
|
@allow_comments = false
|
||||||
|
@id_prefix = 'wiki-'
|
||||||
yield self if block_given?
|
yield self if block_given?
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -100,7 +128,9 @@ module Gollum
|
|||||||
:attributes => attributes,
|
:attributes => attributes,
|
||||||
:protocols => protocols,
|
:protocols => protocols,
|
||||||
:add_attributes => add_attributes,
|
:add_attributes => add_attributes,
|
||||||
:allow_comments => allow_comments?
|
:allow_comments => allow_comments?,
|
||||||
|
:transformers => transformers,
|
||||||
|
:id_prefix => id_prefix
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -467,6 +467,20 @@ context "Markup" do
|
|||||||
compare(content, output, 'org')
|
compare(content, output, 'org')
|
||||||
end
|
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
|
# TeX
|
||||||
|
|||||||
Reference in New Issue
Block a user