Fixed: {{toc}} uses identical anchors for subsections with the same name (#8194).

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@8871 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2012-02-14 08:09:23 +00:00
parent ad668f4277
commit 4ccb898360
2 changed files with 33 additions and 0 deletions

View File

@ -503,6 +503,7 @@ module ApplicationHelper
text = Redmine::WikiFormatting.to_html(Setting.text_formatting, text, :object => obj, :attribute => attr)
@parsed_headings = []
@heading_anchors = {}
@current_section = 0 if options[:edit_section_links]
parse_sections(text, project, obj, attr, only_path, options)
@ -816,6 +817,11 @@ module ApplicationHelper
anchor = sanitize_anchor_name(item)
# 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))
@heading_anchors[anchor] ||= 0
idx = (@heading_anchors[anchor] += 1)
if idx > 1
anchor = "#{anchor}-#{idx}"
end
@parsed_headings << [level, anchor, item]
"<a name=\"#{anchor}\"></a>\n<h#{level} #{attrs}>#{content}<a href=\"##{anchor}\" class=\"wiki-anchor\">&para;</a></h#{level}>"
end

View File

@ -837,6 +837,33 @@ RAW
assert textilizable(raw).gsub("\n", "").include?(expected)
end
def test_table_of_content_should_generate_unique_anchors
raw = <<-RAW
{{toc}}
h1. Title
h2. Subtitle
h2. Subtitle
RAW
expected = '<ul class="toc">' +
'<li><a href="#Title">Title</a>' +
'<ul>' +
'<li><a href="#Subtitle">Subtitle</a></li>' +
'<li><a href="#Subtitle-2">Subtitle</a></li>'
'</ul>'
'</li>' +
'</ul>'
@project = Project.find(1)
result = textilizable(raw).gsub("\n", "")
assert_include expected, result
assert_include '<a name="Subtitle">', result
assert_include '<a name="Subtitle-2">', result
end
def test_table_of_content_should_contain_included_page_headings
raw = <<-RAW
{{toc}}