diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c43dbf0a9..c71083edfa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ Updates should follow the [Keep a CHANGELOG](https://keepachangelog.com/) princi ## [Unreleased][unreleased] +### Fixed + +- Fixed `ExternalLinkProcessor` not fully disabling the `rel` attribute when configured to do so (#992) + ## [2.4.0] - 2023-03-24 ### Added diff --git a/src/Extension/ExternalLink/ExternalLinkProcessor.php b/src/Extension/ExternalLink/ExternalLinkProcessor.php index 0f1852070a..4a0aa890fa 100644 --- a/src/Extension/ExternalLink/ExternalLinkProcessor.php +++ b/src/Extension/ExternalLink/ExternalLinkProcessor.php @@ -90,6 +90,11 @@ private function applyRelAttribute(Link $link, bool $isExternal): void $link->data->append('attributes/rel', $type); } } + + // No rel attributes? Mark the attribute as 'false' so LinkRenderer doesn't add defaults + if (! $link->data->has('attributes/rel')) { + $link->data->set('attributes/rel', false); + } } /** diff --git a/tests/functional/Extension/ExternalLink/ExternalLinkExtensionTest.php b/tests/functional/Extension/ExternalLink/ExternalLinkExtensionTest.php index ff84714c27..1a103f3e2d 100644 --- a/tests/functional/Extension/ExternalLink/ExternalLinkExtensionTest.php +++ b/tests/functional/Extension/ExternalLink/ExternalLinkExtensionTest.php @@ -13,6 +13,7 @@ namespace League\CommonMark\Tests\Functional\Extension\ExternalLink; +use League\CommonMark\CommonMarkConverter; use League\CommonMark\Environment\Environment; use League\CommonMark\Environment\EnvironmentInterface; use League\CommonMark\Extension\Autolink\AutolinkExtension; @@ -65,4 +66,25 @@ public function provideEnvironmentForTestingExtensionWithAutolinks(): iterable yield 'Register Autolink extension first' => [$environment2]; } + + public function testExtensionWithRelAttrsDisabled(): void + { + $config = [ + 'external_link' => [ + 'internal_hosts' => ['my-internal-domain.com'], + 'open_in_new_window' => true, + 'nofollow' => '', + 'noopener' => '', + 'noreferrer' => '', + ], + ]; + + $converter = new CommonMarkConverter($config); + $converter->getEnvironment()->addExtension(new ExternalLinkExtension()); + + $input = 'This is an external link [Google](https://google.com/).'; + $expectedHtml = '

This is an external link Google.

'; + + $this->assertSame($expectedHtml, \rtrim($converter->convert($input)->getContent())); + } }