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)
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\">¶</a></h#{level}>"
end
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}}