Patch #42737 » 0001-If-not-needed-stop-traverse.patch
| lib/redmine/wiki_formatting/common_mark/formatter.rb | ||
|---|---|---|
| 54 | 54 | |
| 55 | 55 |
SANITIZER = SanitizationFilter.new |
| 56 | 56 |
SCRUBBERS = [ |
| 57 |
Redmine::WikiFormatting::CopypreScrubber.new, |
|
| 57 | 58 |
SyntaxHighlightScrubber.new, |
| 58 | 59 |
Redmine::WikiFormatting::TablesortScrubber.new, |
| 59 |
Redmine::WikiFormatting::CopypreScrubber.new, |
|
| 60 | 60 |
FixupAutoLinksScrubber.new, |
| 61 | 61 |
ExternalLinksScrubber.new, |
| 62 | 62 |
AlertsIconsScrubber.new |
| ... | ... | |
| 73 | 73 |
html = MarkdownFilter.new(@text, PIPELINE_CONFIG).call |
| 74 | 74 |
fragment = Redmine::WikiFormatting::HtmlParser.parse(html) |
| 75 | 75 |
SANITIZER.call(fragment) |
| 76 |
SCRUBBERS.each do |scrubber| |
|
| 77 |
fragment.scrub!(scrubber) |
|
| 76 | ||
| 77 |
scrubber = Loofah::Scrubber.new do |node| |
|
| 78 |
SCRUBBERS.each do |s| |
|
| 79 |
result = s.scrub(node) |
|
| 80 |
break result if result == Loofah::Scrubber::STOP |
|
| 81 |
break if node.parent.nil? |
|
| 82 |
end |
|
| 78 | 83 |
end |
| 84 |
fragment.scrub!(scrubber) |
|
| 79 | 85 |
fragment.to_s |
| 80 | 86 |
end |
| 81 | 87 |
end |
| lib/redmine/wiki_formatting/common_mark/syntax_highlight_scrubber.rb | ||
|---|---|---|
| 35 | 35 |
lang = $1 |
| 36 | 36 |
text = node.inner_text |
| 37 | 37 |
process node, text, lang |
| 38 |
Loofah::Scrubber::STOP |
|
| 38 | 39 |
end |
| 39 | 40 |
end |
| 40 | 41 |
end |
| lib/redmine/wiki_formatting/html_sanitizer.rb | ||
|---|---|---|
| 27 | 27 |
def self.call(html) |
| 28 | 28 |
fragment = HtmlParser.parse(html) |
| 29 | 29 |
SANITIZER.call(fragment) |
| 30 |
SCRUBBERS.each do |scrubber| |
|
| 31 |
fragment.scrub!(scrubber) |
|
| 30 |
scrubber = Loofah::Scrubber.new do |node| |
|
| 31 |
SCRUBBERS.each do |s| |
|
| 32 |
result = s.scrub(node) |
|
| 33 |
break result if result == Loofah::Scrubber::STOP |
|
| 34 |
break if node.parent.nil? |
|
| 35 |
end |
|
| 32 | 36 |
end |
| 37 |
fragment.scrub!(scrubber) |
|
| 33 | 38 |
fragment.to_s |
| 34 | 39 |
end |
| 35 | 40 |
end |
| lib/redmine/wiki_formatting/textile/formatter.rb | ||
|---|---|---|
| 21 | 21 |
module WikiFormatting |
| 22 | 22 |
module Textile |
| 23 | 23 |
SCRUBBERS = [ |
| 24 |
Redmine::WikiFormatting::CopypreScrubber.new, |
|
| 24 | 25 |
SyntaxHighlightScrubber.new, |
| 25 |
Redmine::WikiFormatting::TablesortScrubber.new, |
|
| 26 |
Redmine::WikiFormatting::CopypreScrubber.new |
|
| 26 |
Redmine::WikiFormatting::TablesortScrubber.new |
|
| 27 | 27 |
] |
| 28 | 28 | |
| 29 | 29 |
class Formatter |
| ... | ... | |
| 39 | 39 |
def to_html(*rules) |
| 40 | 40 |
html = @filter.to_html(rules) |
| 41 | 41 |
fragment = Loofah.html5_fragment(html) |
| 42 |
SCRUBBERS.each do |scrubber| |
|
| 43 |
fragment.scrub!(scrubber) |
|
| 42 |
scrubber = Loofah::Scrubber.new do |node| |
|
| 43 |
SCRUBBERS.each do |s| |
|
| 44 |
result = s.scrub(node) |
|
| 45 |
break result if result == Loofah::Scrubber::STOP |
|
| 46 |
break if node.parent.nil? |
|
| 47 |
end |
|
| 44 | 48 |
end |
| 49 |
fragment.scrub!(scrubber) |
|
| 45 | 50 |
fragment.to_s |
| 46 | 51 |
end |
| 47 | 52 |
end |
| lib/redmine/wiki_formatting/textile/syntax_highlight_scrubber.rb | ||
|---|---|---|
| 34 | 34 |
end |
| 35 | 35 | |
| 36 | 36 |
process node, text, lang |
| 37 |
Loofah::Scrubber::STOP |
|
| 37 | 38 |
end |
| 38 | 39 |
end |
| 39 | 40 |
end |
| test/helpers/application_helper_test.rb | ||
|---|---|---|
| 1447 | 1447 |
end |
| 1448 | 1448 |
end |
| 1449 | 1449 | |
| 1450 |
def test_syntax_highlight_common_mark |
|
| 1451 |
raw = <<~RAW |
|
| 1452 |
```ECMA_script |
|
| 1453 |
/* Hello */ |
|
| 1454 |
document.write("Hello World!");
|
|
| 1455 |
``` |
|
| 1456 |
RAW |
|
| 1457 |
expected = <<~EXPECTED |
|
| 1458 |
#{pre_wrapper('<pre data-clipboard-target="pre"><code class="ECMA_script syntaxhl" data-language="ECMA_script"><span class="cm">/* Hello */</span><span class="nb">document</span><span class="p">.</span><span class="nf">write</span><span class="p">(</span><span class="dl">"</span><span class="s2">Hello World!</span><span class="dl">"</span><span class="p">);</span></code></pre>')}
|
|
| 1459 |
EXPECTED |
|
| 1460 |
with_settings :text_formatting => 'common_mark' do |
|
| 1461 |
assert_equal expected.gsub(%r{[\r\n\t]}, ''), textilizable(raw).gsub(%r{[\r\n\t]}, '')
|
|
| 1462 |
end |
|
| 1463 |
end |
|
| 1464 | ||
| 1450 | 1465 |
def test_syntax_highlight_ampersand_in_textile |
| 1451 | 1466 |
raw = <<~RAW |
| 1452 | 1467 |
<pre><code class="ruby"> |
- « Previous
- 1
- 2
- 3
- 4
- Next »