diff --git a/src/CommonMark/Extensions/Link/LinkRenderer.php b/src/CommonMark/Extensions/Link/LinkRenderer.php index 767454762..bf0081e3a 100644 --- a/src/CommonMark/Extensions/Link/LinkRenderer.php +++ b/src/CommonMark/Extensions/Link/LinkRenderer.php @@ -111,6 +111,11 @@ private function isInternalLink(string $url): bool return true; } + // Emails + if (str_starts_with($url, 'mailto:')) { + return true; + } + return false; } } diff --git a/tests/CommonMark/Extensions/Link/LinkRendererTest.php b/tests/CommonMark/Extensions/Link/LinkRendererTest.php index 214b64da9..2e15ac4ae 100644 --- a/tests/CommonMark/Extensions/Link/LinkRendererTest.php +++ b/tests/CommonMark/Extensions/Link/LinkRendererTest.php @@ -18,24 +18,31 @@ $environment = new Environment(); $environment->addRenderer(Text::class, new TextRenderer()); - assertMatchesSnapshot((string) $subject->render(new Link($url, 'Label', 'Title'), new HtmlRenderer($environment))); + $element = $subject->render(new Link($url, 'Label', 'Title'), new HtmlRenderer($environment)); + + $this->expect($element->getAttribute('target'))->not->toBe('_blank'); + assertMatchesSnapshot((string) $element); })->with([ 'https://ourapp.com', '#heading', '/path/segment', + 'mailto:test@ark.io', ]); -// it('should render external links', function (string $url) { -// $subject = new LinkRenderer(); -// $subject->setConfiguration(new Configuration()); +it('should render external links', function (string $url) { + $subject = new LinkRenderer(); + $subject->setConfiguration(new Configuration()); + + $environment = new Environment(); + $environment->addRenderer(Text::class, new TextRenderer()); -// $environment = new Environment(); -// $environment->addRenderer(Text::class, new TextRenderer()); + $element = $subject->render(new Link($url, 'Label', 'Title'), new HtmlRenderer($environment)); -// assertMatchesSnapshot((string) $subject->render(new Link($url, 'Label', 'Title'), new HtmlRenderer($environment))); -// })->with([ -// 'https://google.com', -// 'unsupported/relative/url', // is valid, but currently not supported -// 'ftp://google.com', -// '//google.com', -// ]); + $this->expect($element->getAttribute('target'))->toBe('_blank'); + assertMatchesSnapshot((string) $element); +})->with([ + 'https://google.com', + 'unsupported/relative/url', // is valid, but currently not supported + 'ftp://google.com', + '//google.com', +]); diff --git a/tests/__snapshots__/LinkRendererTest__it_should_render_internal_links_with_(mailtotestark.io)__1.txt b/tests/__snapshots__/LinkRendererTest__it_should_render_internal_links_with_(mailtotestark.io)__1.txt new file mode 100644 index 000000000..d3431b7be --- /dev/null +++ b/tests/__snapshots__/LinkRendererTest__it_should_render_internal_links_with_(mailtotestark.io)__1.txt @@ -0,0 +1 @@ +Label \ No newline at end of file