Fix hashtags with markdown escape enabled
They're now transformed to markdown syntax links before processing them through Parsedown. Fixes #1210
This commit is contained in:
parent
f28b73b21f
commit
cb7940e2de
6 changed files with 47 additions and 6 deletions
|
@ -215,6 +215,15 @@ function reverse_text2clickable($description)
|
||||||
$descriptionLine
|
$descriptionLine
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Make hashtag links markdown ready, otherwise the links will be ignored with escape set to true
|
||||||
|
if (!$codeBlockOn && !$codeLineOn) {
|
||||||
|
$descriptionLine = preg_replace(
|
||||||
|
'#<a href="([^ ]*)"'. $hashtagTitle .'>([^<]+)</a>#m',
|
||||||
|
'[$2]($1)',
|
||||||
|
$descriptionLine
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
$descriptionOut .= $descriptionLine;
|
$descriptionOut .= $descriptionLine;
|
||||||
if ($lineCount++ < count($descriptionLines) - 1) {
|
if ($lineCount++ < count($descriptionLines) - 1) {
|
||||||
$descriptionOut .= PHP_EOL;
|
$descriptionOut .= PHP_EOL;
|
||||||
|
|
|
@ -106,6 +106,18 @@ public function testReverseText2clickable()
|
||||||
$this->assertEquals($text, $reversedText);
|
$this->assertEquals($text, $reversedText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test reverse_text2clickable().
|
||||||
|
*/
|
||||||
|
public function testReverseText2clickableHashtags()
|
||||||
|
{
|
||||||
|
$text = file_get_contents('tests/plugins/resources/hashtags.raw');
|
||||||
|
$md = file_get_contents('tests/plugins/resources/hashtags.md');
|
||||||
|
$clickableText = hashtag_autolink($text);
|
||||||
|
$reversedText = reverse_text2clickable($clickableText);
|
||||||
|
$this->assertEquals($md, $reversedText);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test reverse_nl2br().
|
* Test reverse_nl2br().
|
||||||
*/
|
*/
|
||||||
|
@ -246,7 +258,7 @@ public function testMarkdownGlobalProcessDescription()
|
||||||
$this->conf->get('security.markdown_escape', true),
|
$this->conf->get('security.markdown_escape', true),
|
||||||
$this->conf->get('security.allowed_protocols')
|
$this->conf->get('security.allowed_protocols')
|
||||||
);
|
);
|
||||||
$this->assertEquals($html, $data);
|
$this->assertEquals($html, $data . PHP_EOL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
10
tests/plugins/resources/hashtags.md
Normal file
10
tests/plugins/resources/hashtags.md
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
[#lol](?addtag=lol)
|
||||||
|
|
||||||
|
#test
|
||||||
|
|
||||||
|
`#test2`
|
||||||
|
|
||||||
|
```
|
||||||
|
bla #bli blo
|
||||||
|
#bla
|
||||||
|
```
|
10
tests/plugins/resources/hashtags.raw
Normal file
10
tests/plugins/resources/hashtags.raw
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#lol
|
||||||
|
|
||||||
|
#test
|
||||||
|
|
||||||
|
`#test2`
|
||||||
|
|
||||||
|
```
|
||||||
|
bla #bli blo
|
||||||
|
#bla
|
||||||
|
```
|
|
@ -12,11 +12,11 @@
|
||||||
<li><a href="http://link.tld">two</a></li>
|
<li><a href="http://link.tld">two</a></li>
|
||||||
<li><a href="http://link.tld">three</a></li>
|
<li><a href="http://link.tld">three</a></li>
|
||||||
<li><a href="http://link.tld">four</a></li>
|
<li><a href="http://link.tld">four</a></li>
|
||||||
<li>foo <a href="?addtag=foobar" title="Hashtag foobar">#foobar</a></li>
|
<li>foo <a href="?addtag=foobar">#foobar</a></li>
|
||||||
</ol></li>
|
</ol></li>
|
||||||
</ol>
|
</ol>
|
||||||
<p><a href="?addtag=foobar" title="Hashtag foobar">#foobar</a> foo <code>lol #foo</code> <a href="?addtag=bar" title="Hashtag bar">#bar</a></p>
|
<p><a href="?addtag=foobar">#foobar</a> foo <code>lol #foo</code> <a href="?addtag=bar">#bar</a></p>
|
||||||
<p>fsdfs <a href="http://link.tld">http://link.tld</a> <a href="?addtag=foobar" title="Hashtag foobar">#foobar</a> <code>http://link.tld</code></p>
|
<p>fsdfs <a href="http://link.tld">http://link.tld</a> <a href="?addtag=foobar">#foobar</a> <code>http://link.tld</code></p>
|
||||||
<pre><code>http://link.tld #foobar
|
<pre><code>http://link.tld #foobar
|
||||||
next #foo</code></pre>
|
next #foo</code></pre>
|
||||||
<p>Block:</p>
|
<p>Block:</p>
|
||||||
|
|
Loading…
Reference in a new issue