diff --git a/libs/ContentTypes/Markdown/LinkRenderer.php b/libs/ContentTypes/Markdown/LinkRenderer.php index af49138..d25bf74 100644 --- a/libs/ContentTypes/Markdown/LinkRenderer.php +++ b/libs/ContentTypes/Markdown/LinkRenderer.php @@ -58,6 +58,14 @@ class LinkRenderer extends \League\CommonMark\Inline\Renderer\LinkRenderer throw new LinkNotFoundException("Could not locate file '$url'"); } + protected function isValidUrl($url) { + return !empty($url) && $url[0] != '#'; + } + + protected function isExternalUrl($url) { + return preg_match('|^(?:[a-z]+:)?//|', $url); + } + /** * @param AbstractInline|Link $inline * @param ElementRendererInterface $htmlRenderer @@ -83,12 +91,12 @@ class LinkRenderer extends \League\CommonMark\Inline\Renderer\LinkRenderer // empty urls and anchors should // not go through the url resolver - if (empty($url) || $url[0] == '#') { + if (!$this->isValidUrl($url)) { return $element; } // Absolute urls, shouldn't either - if (preg_match('|^(?:[a-z]+:)?//|', $url)) { + if ($this->isExternalUrl($url)) { $element->setAttribute('class', 'external'); return $element; } diff --git a/libs/Format/Confluence/ContentTypes/Markdown/LinkRenderer.php b/libs/Format/Confluence/ContentTypes/Markdown/LinkRenderer.php index e8896ef..41f0cac 100644 --- a/libs/Format/Confluence/ContentTypes/Markdown/LinkRenderer.php +++ b/libs/Format/Confluence/ContentTypes/Markdown/LinkRenderer.php @@ -8,7 +8,7 @@ use League\CommonMark\Inline\Element\Link; class LinkRenderer extends \Todaymade\Daux\ContentTypes\Markdown\LinkRenderer { /** - * @param Link $inline + * @param AbstractInline|Link $inline * @param ElementRendererInterface $htmlRenderer * * @return HtmlElement @@ -28,13 +28,17 @@ class LinkRenderer extends \Todaymade\Daux\ContentTypes\Markdown\LinkRenderer // Default handling $element = parent::render($inline, $htmlRenderer); + $url = $inline->getUrl(); - if (empty($url) || $url[0] != '!') { + + // empty urls, anchors and absolute urls + // should not go through the url resolver + if (!$this->isValidUrl($url) || $this->isExternalUrl($url)) { return $element; } //Internal links - $file = $this->resolveInternalFile(ltrim($url, '!')); + $file = $this->resolveInternalFile($url); $link_props = [ 'ri:content-title' => trim($this->daux['confluence']['prefix']) . ' ' . $file->getTitle(), diff --git a/tests/ContentTypes/Markdown/LinkRendererTest.php b/tests/ContentTypes/Markdown/LinkRendererTest.php index 9941cfa..8c5fa3b 100644 --- a/tests/ContentTypes/Markdown/LinkRendererTest.php +++ b/tests/ContentTypes/Markdown/LinkRendererTest.php @@ -37,7 +37,7 @@ class LinkRendererTest extends \PHPUnit_Framework_TestCase { return [ // /Widgets/Page - ['Link', '[Link](http://google.ch)', 'Widgets/Page.html'], + ['Link', '[Link](http://google.ch)', 'Widgets/Page.html'], ['Link', '[Link](#features)', 'Widgets/Page.html'], ['Link', '[Link](Button.md)', 'Widgets/Page.html'], ['Link', '[Link](./Button.md)', 'Widgets/Page.html'],