diff --git a/libs/ContentTypes/Markdown/LinkRenderer.php b/libs/ContentTypes/Markdown/LinkRenderer.php
index d25bf74..edc013d 100644
--- a/libs/ContentTypes/Markdown/LinkRenderer.php
+++ b/libs/ContentTypes/Markdown/LinkRenderer.php
@@ -58,11 +58,13 @@ class LinkRenderer extends \League\CommonMark\Inline\Renderer\LinkRenderer
throw new LinkNotFoundException("Could not locate file '$url'");
}
- protected function isValidUrl($url) {
+ protected function isValidUrl($url)
+ {
return !empty($url) && $url[0] != '#';
}
- protected function isExternalUrl($url) {
+ protected function isExternalUrl($url)
+ {
return preg_match('|^(?:[a-z]+:)?//|', $url);
}
@@ -101,10 +103,15 @@ class LinkRenderer extends \League\CommonMark\Inline\Renderer\LinkRenderer
return $element;
}
+ // if there's a hash component in the url, ensure we
+ // don't put that part through the resolver.
+ $urlAndHash = explode("#", $url);
+ $url = $urlAndHash[0];
+
try {
$file = $this->resolveInternalFile($url);
$url = DauxHelper::getRelativePath($this->daux->getCurrentPage()->getUrl(), $file->getUrl());
- } catch(LinkNotFoundException $e) {
+ } catch (LinkNotFoundException $e) {
if ($this->daux->isStatic()) {
throw $e;
}
@@ -112,6 +119,10 @@ class LinkRenderer extends \League\CommonMark\Inline\Renderer\LinkRenderer
$element->setAttribute('class', 'broken');
}
+ if (isset($urlAndHash[1])) {
+ $url .= "#" . $urlAndHash[1];
+ }
+
$element->setAttribute('href', $url);
return $element;
diff --git a/tests/ContentTypes/Markdown/LinkRendererTest.php b/tests/ContentTypes/Markdown/LinkRendererTest.php
index 8c5fa3b..af84842 100644
--- a/tests/ContentTypes/Markdown/LinkRendererTest.php
+++ b/tests/ContentTypes/Markdown/LinkRendererTest.php
@@ -45,6 +45,9 @@ class LinkRendererTest extends \PHPUnit_Framework_TestCase
['Link', '[Link](./Button)', 'Widgets/Page.html'],
['Link', '[Link](!Widgets/Button)', 'Widgets/Page.html'],
+ ['Link', '[Link](./Button#Test)', 'Widgets/Page.html'],
+ ['Link', '[Link](!Widgets/Button#Test)', 'Widgets/Page.html'],
+
// /Content/Page
['Link', '[Link](../Widgets/Button.md)', 'Content/Page.html'],
['Link', '[Link](!Widgets/Button)', 'Content/Page.html'],