Fix feed permalink rendering with markdown escape set to true
Fixes #1134
This commit is contained in:
parent
73da3a269b
commit
dd6794cff8
2 changed files with 63 additions and 0 deletions
|
@ -6,6 +6,8 @@
|
|||
* Shaare's descriptions are parsed with Markdown.
|
||||
*/
|
||||
|
||||
use Shaarli\Config\ConfigManager;
|
||||
|
||||
/*
|
||||
* If this tag is used on a shaare, the description won't be processed by Parsedown.
|
||||
*/
|
||||
|
@ -50,6 +52,7 @@ function hook_markdown_render_feed($data, $conf)
|
|||
$value = stripNoMarkdownTag($value);
|
||||
continue;
|
||||
}
|
||||
$value['description'] = reverse_feed_permalink($value['description']);
|
||||
$value['description'] = process_markdown(
|
||||
$value['description'],
|
||||
$conf->get('security.markdown_escape', true),
|
||||
|
@ -244,6 +247,11 @@ function reverse_space2nbsp($description)
|
|||
return preg_replace('/(^| ) /m', '$1 ', $description);
|
||||
}
|
||||
|
||||
function reverse_feed_permalink($description)
|
||||
{
|
||||
return preg_replace('@— <a href="([^"]+)" title="[^"]+">(\w+)</a>$@im', '— [$2]($1)', $description);
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace not whitelisted protocols with http:// in given description.
|
||||
*
|
||||
|
|
|
@ -49,6 +49,30 @@ public function testMarkdownLinklist()
|
|||
$this->assertNotFalse(strpos($data['links'][0]['description'], '<p>'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test render_feed hook.
|
||||
*/
|
||||
public function testMarkdownFeed()
|
||||
{
|
||||
$markdown = '# My title' . PHP_EOL . 'Very interesting content.';
|
||||
$markdown .= '— <a href="http://domain.tld/?0oc_VQ" title="Permalien">Permalien</a>';
|
||||
$data = array(
|
||||
'links' => array(
|
||||
0 => array(
|
||||
'description' => $markdown,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
$data = hook_markdown_render_feed($data, $this->conf);
|
||||
$this->assertNotFalse(strpos($data['links'][0]['description'], '<h1>'));
|
||||
$this->assertNotFalse(strpos($data['links'][0]['description'], '<p>'));
|
||||
$this->assertStringEndsWith(
|
||||
'— <a href="http://domain.tld/?0oc_VQ">Permalien</a></p></div>',
|
||||
$data['links'][0]['description']
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test render_daily hook.
|
||||
* Only check that there is basic markdown rendering.
|
||||
|
@ -104,6 +128,37 @@ public function testReverseSpace2nbsp()
|
|||
$this->assertEquals($text, $reversedText);
|
||||
}
|
||||
|
||||
public function testReverseFeedPermalink()
|
||||
{
|
||||
$text = 'Description... ';
|
||||
$text .= '— <a href="http://domain.tld/?0oc_VQ" title="Permalien">Permalien</a>';
|
||||
$expected = 'Description... — [Permalien](http://domain.tld/?0oc_VQ)';
|
||||
$processedText = reverse_feed_permalink($text);
|
||||
|
||||
$this->assertEquals($expected, $processedText);
|
||||
}
|
||||
|
||||
public function testReverseLastFeedPermalink()
|
||||
{
|
||||
$text = 'Description... ';
|
||||
$text .= '<br>— <a href="http://domain.tld/?0oc_VQ" title="Permalien">Permalien</a>';
|
||||
$expected = $text;
|
||||
$text .= '<br>— <a href="http://domain.tld/?0oc_VQ" title="Permalien">Permalien</a>';
|
||||
$expected .= '<br>— [Permalien](http://domain.tld/?0oc_VQ)';
|
||||
$processedText = reverse_feed_permalink($text);
|
||||
|
||||
$this->assertEquals($expected, $processedText);
|
||||
}
|
||||
|
||||
public function testReverseNoFeedPermalink()
|
||||
{
|
||||
$text = 'Hello! Where are you from?';
|
||||
$expected = $text;
|
||||
$processedText = reverse_feed_permalink($text);
|
||||
|
||||
$this->assertEquals($expected, $processedText);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test sanitize_html().
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue