Patch #3749 » Wiki_TOC_The_standardised_anchors_for_redmine2845trunk.diff
test/unit/helpers/application_helper_test.rb (working copy) | ||
---|---|---|
304 | 304 |
end |
305 | 305 |
def test_table_of_content |
306 |
raw = <<-RAW
|
|
306 |
raw = <<-'RAW'
|
|
307 | 307 |
{{toc}} |
308 | 308 |
h1. Title |
... | ... | |
321 | 321 |
h1. Another title |
322 |
h2. Subtitle with x%x% redcloth3 dummy character |
|
323 | ||
324 |
h2. Subtitle with "#$%'()*+,-./:;<=>?@[\]^_{|}~ incorrect characters |
|
325 | ||
326 |
h2. Subtitle with russian character "абв" (utf8) |
|
327 | ||
322 | 328 |
RAW |
323 | 329 |
expected = '<ul class="toc">' + |
324 |
'<li class="heading1"><a href="#Title">Title</a></li>' + |
|
325 |
'<li class="heading2"><a href="#Subtitle-with-a-Wiki-link">Subtitle with a Wiki link</a></li>' + |
|
326 |
'<li class="heading2"><a href="#Subtitle-with-another-Wiki-link">Subtitle with another Wiki link</a></li>' + |
|
327 |
'<li class="heading2"><a href="#Subtitle-with-red-text">Subtitle with red text</a></li>' + |
|
328 |
'<li class="heading1"><a href="#Another-title">Another title</a></li>' + |
|
330 |
'<li class="heading1"><a href="#h-Title">Title</a></li>' + |
|
331 |
'<li class="heading2"><a href="#h-Subtitle-with-a-Wiki-link">Subtitle with a Wiki link</a></li>' + |
|
332 |
'<li class="heading2"><a href="#h-Subtitle-with-another-Wiki-link">Subtitle with another Wiki link</a></li>' + |
|
333 |
'<li class="heading2"><a href="#h-Subtitle-with-red-text">Subtitle with red text</a></li>' + |
|
334 |
'<li class="heading1"><a href="#h-Another-title">Another title</a></li>' + |
|
335 |
'<li class="heading2"><a href="#h-Subtitle-with-redcloth3-dummy-character">Subtitle with & redcloth3 dummy character</a></li>' + |
|
336 |
'<li class="heading2"><a href="#h-Subtitle-with-incorrect-characters">Subtitle with "#$%\'()*+,-./:;<=>?@[\]^_{|}~ incorrect characters</a></li>' + |
|
337 |
'<li class="heading2"><a href="#h-Subtitle-with-russian-character-.D0.B0.D0.B1.D0.B2-utf8">Subtitle with russian character "абв" (utf8)</a></li>' + |
|
329 | 338 |
'</ul>' |
330 | 339 |
assert textilizable(raw).gsub("\n", "").include?(expected) |
lib/redmine/wiki_formatting/textile/formatter.rb (working copy) | ||
---|---|---|
66 | 66 |
def textile_p_withtoc(tag, atts, cite, content) |
67 | 67 |
# removes wiki links from the item |
68 | 68 |
toc_item = content.gsub(/(\[\[([^\]\|]*)(\|([^\]]*))?\]\])/) { $4 || $2 } |
69 | ||
69 | 70 |
# removes styles |
70 | 71 |
# eg. %{color:red}Triggers% => Triggers |
71 | 72 |
toc_item.gsub! %r[%\{[^\}]*\}([^%]+)%], '\\1' |
72 |
# replaces non word caracters by dashes |
|
73 |
anchor = toc_item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-') |
|
73 |
# removes all except the alphabet, digits, hyphens |
|
74 |
# and dummy character of incoming ampersand (see redcloth3) |
|
75 |
# for compatibility with rfc952, also replace space and repeatable hyphens |
|
76 |
anchor = toc_item.gsub(%r{[^\w\s\-]|_|(x\%x\%)}, '').gsub(%r{\s+(\-+\s*)?}, '-') |
|
77 |
# ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed |
|
78 |
# by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), |
|
79 |
# colons (":"), and periods ("."). (http://www.w3.org/TR/html4/types.html#h-6.2) |
|
80 |
anchor = 'h-' + CGI.escape(anchor).gsub('%', '.') |
|
81 | ||
74 | 82 |
unless anchor.blank? |
75 | 83 |
if tag =~ /^h(\d)$/ |
76 | 84 |
@toc << [$1.to_i, anchor, toc_item] |
- « Previous
- 1
- 2
- Next »