From 28c9ab1e4d70d9b303536c2f91c1f30d91afdfc1 Mon Sep 17 00:00:00 2001 From: alfonsobries Date: Fri, 1 Oct 2021 12:49:49 -0500 Subject: [PATCH 1/2] Update commonmark to handle extensions --- .../Extensions/Image/ContainerRenderer.php | 2 +- .../Extensions/Image/ImageRenderer.php | 4 ++-- src/CommonMark/Extensions/Link/LinkRenderer.php | 2 +- src/Providers/CommonMarkServiceProvider.php | 16 ++++++++++++++-- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/CommonMark/Extensions/Image/ContainerRenderer.php b/src/CommonMark/Extensions/Image/ContainerRenderer.php index 2030bfeb2..65aabfcc7 100644 --- a/src/CommonMark/Extensions/Image/ContainerRenderer.php +++ b/src/CommonMark/Extensions/Image/ContainerRenderer.php @@ -9,7 +9,7 @@ final class ContainerRenderer { /** @phpstan-ignore-next-line */ - public static function render($content, $title): HtmlElement + public static function render($content, $title): \Stringable|string|null { /* @phpstan-ignore-next-line */ if (empty($title)) { diff --git a/src/CommonMark/Extensions/Image/ImageRenderer.php b/src/CommonMark/Extensions/Image/ImageRenderer.php index 5bfc6f7ee..058afe5ed 100644 --- a/src/CommonMark/Extensions/Image/ImageRenderer.php +++ b/src/CommonMark/Extensions/Image/ImageRenderer.php @@ -21,7 +21,7 @@ final class ImageRenderer implements NodeRendererInterface, XmlNodeRendererInter */ protected ConfigurationInterface $config; - public function render(Node $node, ChildNodeRendererInterface $childRenderer): \Stringable + public function render(Node $node, ChildNodeRendererInterface $childRenderer): \Stringable|string|null { Image::assertInstanceOf($node); @@ -34,7 +34,7 @@ public function render(Node $node, ChildNodeRendererInterface $childRenderer): \ $attrs['src'] = $node->getUrl(); } - $alt = $node->renderNodes($node->children()); + $alt = $childRenderer->renderNodes($node->children()); $alt = \preg_replace('/\<[^>]*alt="([^"]*)"[^>]*\>/', '$1', $alt); $attrs['alt'] = \preg_replace('/\<[^>]*\>/', '', $alt); diff --git a/src/CommonMark/Extensions/Link/LinkRenderer.php b/src/CommonMark/Extensions/Link/LinkRenderer.php index 4bae7e419..767454762 100644 --- a/src/CommonMark/Extensions/Link/LinkRenderer.php +++ b/src/CommonMark/Extensions/Link/LinkRenderer.php @@ -23,7 +23,7 @@ final class LinkRenderer implements NodeRendererInterface, XmlNodeRendererInterf */ private ConfigurationInterface $config; - public function render(Node $node, ChildNodeRendererInterface $childRenderer): \Stringable + public function render(Node $node, ChildNodeRendererInterface $childRenderer): \Stringable|string|null { Link::assertInstanceOf($node); diff --git a/src/Providers/CommonMarkServiceProvider.php b/src/Providers/CommonMarkServiceProvider.php index d6c0f88b9..17e58443f 100644 --- a/src/Providers/CommonMarkServiceProvider.php +++ b/src/Providers/CommonMarkServiceProvider.php @@ -49,6 +49,9 @@ use League\CommonMark\Extension\CommonMark\Renderer\Inline\EmphasisRenderer; use League\CommonMark\Extension\CommonMark\Renderer\Inline\HtmlInlineRenderer; use League\CommonMark\Extension\CommonMark\Renderer\Inline\StrongRenderer; +use League\CommonMark\Extension\ExternalLink\ExternalLinkExtension; +use League\CommonMark\Extension\HeadingPermalink\HeadingPermalinkExtension; +use League\CommonMark\MarkdownConverterInterface; use League\CommonMark\Node\Block\Document; use League\CommonMark\Node\Block\Paragraph; use League\CommonMark\Node\Inline\Newline; @@ -137,7 +140,8 @@ private function registerViewFinder(): void private function registerCommonMarkEnvironment(): void { /** @var \League\CommonMark\Environment\Environment */ - $environment = $this->app->get('markdown.environment'); + $environment = app(MarkdownConverterInterface::class)->getEnvironment(); + $environment->addRenderer(FencedCode::class, new FencedCodeRenderer()); $environment->addBlockStartParser(new BlockQuoteStartParser(), 70); @@ -193,6 +197,9 @@ private function registerCommonMarkEnvironment(): void $environment->addRenderer($interface, resolve($implementation), 0); } + $environment->addExtension(new ExternalLinkExtension()); + $environment->addExtension(new HeadingPermalinkExtension()); + $environment->mergeConfig([ 'external_link' => [ 'internal_hosts' => config('app.url'), @@ -202,13 +209,18 @@ private function registerCommonMarkEnvironment(): void 'noopener' => 'external', 'noreferrer' => 'external', ], + + 'heading_permalink' => [ 'html_class' => 'heading-permalink', 'id_prefix' => 'user-content', 'insert' => 'before', 'title' => 'Permalink', 'symbol' => '#', - 'slug_normalizer' => new SlugNormalizer(), + ], + + 'slug_normalizer' => [ + 'instance' => new SlugNormalizer(), ], ]); } From af31bffc91b66383edd927ef5dc1916807a30b22 Mon Sep 17 00:00:00 2001 From: alfonsobries Date: Fri, 1 Oct 2021 13:08:32 -0500 Subject: [PATCH 2/2] Attributes should be a string --- .../Extensions/Image/YouTubeRenderer.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/CommonMark/Extensions/Image/YouTubeRenderer.php b/src/CommonMark/Extensions/Image/YouTubeRenderer.php index 6c100bdf6..fbc76ebab 100644 --- a/src/CommonMark/Extensions/Image/YouTubeRenderer.php +++ b/src/CommonMark/Extensions/Image/YouTubeRenderer.php @@ -12,16 +12,16 @@ public static function render(MediaUrl $url): HtmlElement { $video = new HtmlElement('iframe', [ 'width' => '100%', - 'height' => 480, + 'height' => '480', 'src' => 'https://www.youtube.com/embed/'.$url->getId(), - 'frameborder' => 0, - 'allowfullscreen' => 1, + 'frameborder' => '0', + 'allowfullscreen' => '1', // Noise - 'showinfo' => 0, - 'controls' => 0, - 'autoplay' => 0, - 'modestbranding' => 1, - 'autohide' => 1, + 'showinfo' => '0', + 'controls' => '0', + 'autoplay' => '0', + 'modestbranding' => '1', + 'autohide' => '1', ]); $container = new HtmlElement('div', ['class' => 'video-container']);