##// END OF EJS Templates
Render TOC as nested lists (#1857)....
Jean-Philippe Lang -
r4263:7f9d2b080416
parent child
Show More
@@ -682,7 +682,7 module ApplicationHelper
682 def parse_headings(text, project, obj, attr, only_path, options)
682 def parse_headings(text, project, obj, attr, only_path, options)
683 headings = []
683 headings = []
684 text.gsub!(HEADING_RE) do
684 text.gsub!(HEADING_RE) do
685 level, attrs, content = $1, $2, $3
685 level, attrs, content = $1.to_i, $2, $3
686 item = strip_tags(content).strip
686 item = strip_tags(content).strip
687 anchor = item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-')
687 anchor = item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-')
688 headings << [level, anchor, item]
688 headings << [level, anchor, item]
@@ -696,12 +696,24 module ApplicationHelper
696 div_class = 'toc'
696 div_class = 'toc'
697 div_class << ' right' if $1 == '>'
697 div_class << ' right' if $1 == '>'
698 div_class << ' left' if $1 == '<'
698 div_class << ' left' if $1 == '<'
699 out = "<ul class=\"#{div_class}\">"
699 out = "<ul class=\"#{div_class}\"><li>"
700 root = headings.map(&:first).min
701 current = root
702 started = false
700 headings.each do |level, anchor, item|
703 headings.each do |level, anchor, item|
701 out << "<li class=\"heading#{level}\"><a href=\"##{anchor}\">#{item}</a></li>\n"
704 if level > current
705 out << '<ul><li>' * (level - current)
706 elsif level < current
707 out << "</li></ul>\n" * (current - level) + "</li><li>"
708 elsif started
709 out << '</li><li>'
710 end
711 out << "<a href=\"##{anchor}\">#{item}</a>"
712 current = level
713 started = true
702 end
714 end
703 out << '</ul>'
715 out << '</li></ul>' * (current - root)
704 out
716 out << '</li></ul>'
705 end
717 end
706 end
718 end
707 end
719 end
@@ -715,9 +715,10 div.wiki ul.toc {
715
715
716 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
716 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
717 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
717 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
718 div.wiki ul.toc li { list-style-type:none;}
718 div.wiki ul.toc ul { margin: 0; padding: 0; }
719 div.wiki ul.toc li.heading2 { margin-left: 6px; }
719 div.wiki ul.toc li { list-style-type:none; margin: 0;}
720 div.wiki ul.toc li.heading3 { margin-left: 12px; font-size: 0.8em; }
720 div.wiki ul.toc li li { margin-left: 1.5em; }
721 div.wiki ul.toc li li li { font-size: 0.8em; }
721
722
722 div.wiki ul.toc a {
723 div.wiki ul.toc a {
723 font-size: 0.9em;
724 font-size: 0.9em;
@@ -423,25 +423,38 h2. Subtitle with [[Wiki|another Wiki]] link
423
423
424 h2. Subtitle with %{color:red}red text%
424 h2. Subtitle with %{color:red}red text%
425
425
426 h2. Subtitle with *some* _modifiers_
426 h3. Subtitle with *some* _modifiers_
427
427
428 h1. Another title
428 h1. Another title
429
429
430 h2. An "Internet link":http://www.redmine.org/ inside subtitle
430 h3. An "Internet link":http://www.redmine.org/ inside subtitle
431
431
432 h2. "Project Name !/attachments/1234/logo_small.gif! !/attachments/5678/logo_2.png!":/projects/projectname/issues
432 h2. "Project Name !/attachments/1234/logo_small.gif! !/attachments/5678/logo_2.png!":/projects/projectname/issues
433
433
434 RAW
434 RAW
435
435
436 expected = '<ul class="toc">' +
436 expected = '<ul class="toc">' +
437 '<li class="heading1"><a href="#Title">Title</a></li>' +
437 '<li><a href="#Title">Title</a>' +
438 '<li class="heading2"><a href="#Subtitle-with-a-Wiki-link">Subtitle with a Wiki link</a></li>' +
438 '<ul>' +
439 '<li class="heading2"><a href="#Subtitle-with-another-Wiki-link">Subtitle with another Wiki link</a></li>' +
439 '<li><a href="#Subtitle-with-a-Wiki-link">Subtitle with a Wiki link</a></li>' +
440 '<li class="heading2"><a href="#Subtitle-with-red-text">Subtitle with red text</a></li>' +
440 '<li><a href="#Subtitle-with-another-Wiki-link">Subtitle with another Wiki link</a></li>' +
441 '<li class="heading2"><a href="#Subtitle-with-some-modifiers">Subtitle with some modifiers</a></li>' +
441 '<li><a href="#Subtitle-with-red-text">Subtitle with red text</a>' +
442 '<li class="heading1"><a href="#Another-title">Another title</a></li>' +
442 '<ul>' +
443 '<li class="heading2"><a href="#An-Internet-link-inside-subtitle">An Internet link inside subtitle</a></li>' +
443 '<li><a href="#Subtitle-with-some-modifiers">Subtitle with some modifiers</a></li>' +
444 '<li class="heading2"><a href="#Project-Name">Project Name</a></li>' +
444 '</ul>' +
445 '</li>' +
446 '</ul>' +
447 '</li>' +
448 '<li><a href="#Another-title">Another title</a>' +
449 '<ul>' +
450 '<li>' +
451 '<ul>' +
452 '<li><a href="#An-Internet-link-inside-subtitle">An Internet link inside subtitle</a></li>' +
453 '</ul>' +
454 '</li>' +
455 '<li><a href="#Project-Name">Project Name</a></li>' +
456 '</ul>' +
457 '</li>' +
445 '</ul>'
458 '</ul>'
446
459
447 @project = Project.find(1)
460 @project = Project.find(1)
@@ -458,8 +471,8 h1. Included
458 RAW
471 RAW
459
472
460 expected = '<ul class="toc">' +
473 expected = '<ul class="toc">' +
461 '<li class="heading1"><a href="#Included">Included</a></li>' +
474 '<li><a href="#Included">Included</a></li>' +
462 '<li class="heading1"><a href="#Child-page-1">Child page 1</a></li>' +
475 '<li><a href="#Child-page-1">Child page 1</a></li>' +
463 '</ul>'
476 '</ul>'
464
477
465 @project = Project.find(1)
478 @project = Project.find(1)
General Comments 0
You need to be logged in to leave comments. Login now