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.
|
* 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.
|
* 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);
|
$value = stripNoMarkdownTag($value);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
$value['description'] = reverse_feed_permalink($value['description']);
|
||||||
$value['description'] = process_markdown(
|
$value['description'] = process_markdown(
|
||||||
$value['description'],
|
$value['description'],
|
||||||
$conf->get('security.markdown_escape', true),
|
$conf->get('security.markdown_escape', true),
|
||||||
|
@ -244,6 +247,11 @@ function reverse_space2nbsp($description)
|
||||||
return preg_replace('/(^| ) /m', '$1 ', $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.
|
* Replace not whitelisted protocols with http:// in given description.
|
||||||
*
|
*
|
||||||
|
|
|
@ -49,6 +49,30 @@ public function testMarkdownLinklist()
|
||||||
$this->assertNotFalse(strpos($data['links'][0]['description'], '<p>'));
|
$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.
|
* Test render_daily hook.
|
||||||
* Only check that there is basic markdown rendering.
|
* Only check that there is basic markdown rendering.
|
||||||
|
@ -104,6 +128,37 @@ public function testReverseSpace2nbsp()
|
||||||
$this->assertEquals($text, $reversedText);
|
$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().
|
* Test sanitize_html().
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue