diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 363653cd8..acb7ba9db 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -978,19 +978,20 @@ module ApplicationHelper
end
end
- TOC_RE = /
\{\{([<>]?)toc\}\}<\/p>/i unless const_defined?(:TOC_RE)
+ TOC_RE = /
\{\{((<|<)|(>|>))?toc\}\}<\/p>/i unless const_defined?(:TOC_RE)
# Renders the TOC with given headings
def replace_toc(text, headings)
text.gsub!(TOC_RE) do
+ left_align, right_align = $2, $3
# Keep only the 4 first levels
headings = headings.select{|level, anchor, item| level <= 4}
if headings.empty?
''
else
div_class = 'toc'
- div_class << ' right' if $1 == '>'
- div_class << ' left' if $1 == '<'
+ div_class << ' right' if right_align
+ div_class << ' left' if left_align
out = "
- "
root = headings.map(&:first).min
current = root
diff --git a/test/unit/helpers/application_helper_test.rb b/test/unit/helpers/application_helper_test.rb
index f645f1a52..e0abe026e 100644
--- a/test/unit/helpers/application_helper_test.rb
+++ b/test/unit/helpers/application_helper_test.rb
@@ -1167,6 +1167,24 @@ RAW
assert textilizable(raw).gsub("\n", "").include?(expected)
end
+ def test_toc_with_textile_formatting_should_be_parsed
+ with_settings :text_formatting => 'textile' do
+ assert_select_in textilizable("{{toc}}\n\nh1. Heading"), 'ul.toc li', :text => 'Heading'
+ assert_select_in textilizable("{{ 'Heading'
+ assert_select_in textilizable("{{>toc}}\n\nh1. Heading"), 'ul.toc.right li', :text => 'Heading'
+ end
+ end
+
+ if Object.const_defined?(:Redcarpet)
+ def test_toc_with_markdown_formatting_should_be_parsed
+ with_settings :text_formatting => 'markdown' do
+ assert_select_in textilizable("{{toc}}\n\n# Heading"), 'ul.toc li', :text => 'Heading'
+ assert_select_in textilizable("{{ 'Heading'
+ assert_select_in textilizable("{{>toc}}\n\n# Heading"), 'ul.toc.right li', :text => 'Heading'
+ end
+ end
+ end
+
def test_section_edit_links
raw = <<-RAW
h1. Title