Merge pull request #336 from jroes/remove-links-in-code
Remove links in code, fixes #128.
This commit is contained in:
@@ -53,6 +53,7 @@ module Gollum
|
|||||||
end
|
end
|
||||||
data = process_tags(data)
|
data = process_tags(data)
|
||||||
data = process_code(data, encoding)
|
data = process_code(data, encoding)
|
||||||
|
|
||||||
if sanitize || block_given?
|
if sanitize || block_given?
|
||||||
doc = Nokogiri::HTML::DocumentFragment.parse(data)
|
doc = Nokogiri::HTML::DocumentFragment.parse(data)
|
||||||
doc = sanitize.clean_node!(doc) if sanitize
|
doc = sanitize.clean_node!(doc) if sanitize
|
||||||
@@ -153,11 +154,29 @@ module Gollum
|
|||||||
# Returns the marked up String data.
|
# Returns the marked up String data.
|
||||||
def process_tags(data)
|
def process_tags(data)
|
||||||
@tagmap.each do |id, tag|
|
@tagmap.each do |id, tag|
|
||||||
|
# If it's preformatted, just put the tag back
|
||||||
|
if is_preformatted?(data, id)
|
||||||
|
data.gsub!(id, "[[#{tag}]]")
|
||||||
|
else
|
||||||
data.gsub!(id, process_tag(tag))
|
data.gsub!(id, process_tag(tag))
|
||||||
end
|
end
|
||||||
|
end
|
||||||
data
|
data
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Find `id` within `data` and determine if it's within
|
||||||
|
# preformatted tags.
|
||||||
|
#
|
||||||
|
# data - The String data (with placeholders).
|
||||||
|
# id - The String SHA1 hash.
|
||||||
|
PREFORMATTED_TAGS = %w(code tt)
|
||||||
|
def is_preformatted?(data, id)
|
||||||
|
doc = Nokogiri::HTML::DocumentFragment.parse(data)
|
||||||
|
node = doc.search("[text()*='#{id}']").first
|
||||||
|
node && (PREFORMATTED_TAGS.include?(node.name) ||
|
||||||
|
node.ancestors.any? { |a| PREFORMATTED_TAGS.include?(a.name) })
|
||||||
|
end
|
||||||
|
|
||||||
# Process a single tag into its final HTML form.
|
# Process a single tag into its final HTML form.
|
||||||
#
|
#
|
||||||
# tag - The String tag contents (the stuff inside the double
|
# tag - The String tag contents (the stuff inside the double
|
||||||
|
|||||||
+20
-1
@@ -173,7 +173,26 @@ context "Markup" do
|
|||||||
@wiki.write_page("Potato", :mediawiki, "a [[Potato|Potato Heaad]] ", commit_details)
|
@wiki.write_page("Potato", :mediawiki, "a [[Potato|Potato Heaad]] ", commit_details)
|
||||||
page = @wiki.page("Potato")
|
page = @wiki.page("Potato")
|
||||||
output = page.formatted_data
|
output = page.formatted_data
|
||||||
assert_equal normal("<p>\na <a class=\"internal present\" href=\"/Potato\">Potato Heaad</a> </p>"), normal(output)
|
assert_equal normal("<p>\na <a class=\"internal present\" href=\"/Potato\">Potato Heaad</a> </p>
|
||||||
|
"), normal(output)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "wiki link within inline code block" do
|
||||||
|
@wiki.write_page("Potato", :markdown, "`sed -i '' 's/[[:space:]]*$//'`", commit_details)
|
||||||
|
page = @wiki.page("Potato")
|
||||||
|
assert_equal "<p><code>sed -i '' 's/[[:space:]]*$//'</code></p>", page.formatted_data
|
||||||
|
end
|
||||||
|
|
||||||
|
test "wiki link within code block" do
|
||||||
|
@wiki.write_page("Potato", :markdown, " sed -i '' 's/[[:space:]]*$//'", commit_details)
|
||||||
|
page = @wiki.page("Potato")
|
||||||
|
assert_equal "<pre><code>sed -i '' 's/[[:space:]]*$//'\n</code></pre>", page.formatted_data
|
||||||
|
end
|
||||||
|
|
||||||
|
test "piped wiki link within code block" do
|
||||||
|
@wiki.write_page("Potato", :markdown, "`make a link [[home|sweet home]]`", commit_details)
|
||||||
|
page = @wiki.page("Potato")
|
||||||
|
assert_equal "<p><code>make a link [[home|sweet home]]</code></p>", page.formatted_data
|
||||||
end
|
end
|
||||||
|
|
||||||
#########################################################################
|
#########################################################################
|
||||||
|
|||||||
Reference in New Issue
Block a user