Make sure that anchor names generated for headings fully match wiki links (#7215).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@7563 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
8bb90f87fb
commit
65b533a8ec
|
@ -570,6 +570,7 @@ module ApplicationHelper
|
||||||
if page =~ /^(.+?)\#(.+)$/
|
if page =~ /^(.+?)\#(.+)$/
|
||||||
page, anchor = $1, $2
|
page, anchor = $1, $2
|
||||||
end
|
end
|
||||||
|
anchor = sanitize_anchor_name(anchor) if anchor.present?
|
||||||
# check if page exists
|
# check if page exists
|
||||||
wiki_page = link_project.wiki.find_page(page)
|
wiki_page = link_project.wiki.find_page(page)
|
||||||
url = if anchor.present? && wiki_page.present? && (obj.is_a?(WikiContent) || obj.is_a?(WikiContent::Version)) && obj.page == wiki_page
|
url = if anchor.present? && wiki_page.present? && (obj.is_a?(WikiContent) || obj.is_a?(WikiContent::Version)) && obj.page == wiki_page
|
||||||
|
@ -727,7 +728,7 @@ module ApplicationHelper
|
||||||
text.gsub!(HEADING_RE) do
|
text.gsub!(HEADING_RE) do
|
||||||
level, attrs, content = $1.to_i, $2, $3
|
level, attrs, content = $1.to_i, $2, $3
|
||||||
item = strip_tags(content).strip
|
item = strip_tags(content).strip
|
||||||
anchor = item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-')
|
anchor = sanitize_anchor_name(item)
|
||||||
# used for single-file wiki export
|
# used for single-file wiki export
|
||||||
anchor = "#{obj.page.title}_#{anchor}" if options[:wiki_links] == :anchor && (obj.is_a?(WikiContent) || obj.is_a?(WikiContent::Version))
|
anchor = "#{obj.page.title}_#{anchor}" if options[:wiki_links] == :anchor && (obj.is_a?(WikiContent) || obj.is_a?(WikiContent::Version))
|
||||||
@parsed_headings << [level, anchor, item]
|
@parsed_headings << [level, anchor, item]
|
||||||
|
@ -919,6 +920,10 @@ module ApplicationHelper
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def sanitize_anchor_name(anchor)
|
||||||
|
anchor.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-')
|
||||||
|
end
|
||||||
|
|
||||||
# Returns the javascript tags that are included in the html layout head
|
# Returns the javascript tags that are included in the html layout head
|
||||||
def javascript_heads
|
def javascript_heads
|
||||||
tags = javascript_include_tag(:defaults)
|
tags = javascript_include_tag(:defaults)
|
||||||
|
|
|
@ -553,6 +553,16 @@ EXPECTED
|
||||||
assert_equal expected, textilizable(raw)
|
assert_equal expected, textilizable(raw)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_headings_with_special_chars
|
||||||
|
# This test makes sure that the generated anchor names match the expected
|
||||||
|
# ones even if the heading text contains unconventional characters
|
||||||
|
raw = 'h1. Some heading related to version 0.5'
|
||||||
|
anchor = sanitize_anchor_name("Some-heading-related-to-version-0.5")
|
||||||
|
expected = %|<a name="#{anchor}"></a>\n<h1 >Some heading related to version 0.5<a href="##{anchor}" class="wiki-anchor">¶</a></h1>|
|
||||||
|
|
||||||
|
assert_equal expected, textilizable(raw)
|
||||||
|
end
|
||||||
|
|
||||||
def test_wiki_links_within_wiki_page_context
|
def test_wiki_links_within_wiki_page_context
|
||||||
|
|
||||||
page = WikiPage.find_by_title('Another_page' )
|
page = WikiPage.find_by_title('Another_page' )
|
||||||
|
|
Loading…
Reference in New Issue