@@ -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 |
|
719 | div.wiki ul.toc li { list-style-type:none; margin: 0;} | |
720 |
div.wiki ul.toc li |
|
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 |
h |
|
426 | h3. Subtitle with *some* _modifiers_ | |
427 |
|
427 | |||
428 | h1. Another title |
|
428 | h1. Another title | |
429 |
|
429 | |||
430 |
h |
|
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 |
|
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 |
|
439 | '<li><a href="#Subtitle-with-a-Wiki-link">Subtitle with a Wiki link</a></li>' + | |
440 |
'<li |
|
440 | '<li><a href="#Subtitle-with-another-Wiki-link">Subtitle with another Wiki link</a></li>' + | |
441 |
'<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 |
|
474 | '<li><a href="#Included">Included</a></li>' + | |
462 |
'<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