From f74562987dacd46290a7db6c6c4bc66b06c6cd8a Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Wed, 24 Feb 2016 14:45:57 -0700 Subject: [PATCH] Fix for pure URL fragment getting Url prepended - #701 --- system/src/Grav/Common/Uri.php | 16 ++++++------ .../Grav/Common/Markdown/ParsedownTest.php | 25 ++++++++----------- 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/system/src/Grav/Common/Uri.php b/system/src/Grav/Common/Uri.php index 4a7006447..fca059a3f 100644 --- a/system/src/Grav/Common/Uri.php +++ b/system/src/Grav/Common/Uri.php @@ -746,18 +746,18 @@ class Uri $url_path = $url; } - $external = false; - $base = $grav['base_url_relative']; - $base_url = rtrim($base . $grav['pages']->base(), '/') . $language_append; - $pages_dir = $grav['locator']->findResource('page://'); + $external = false; + $base = $grav['base_url_relative']; + $base_url = rtrim($base . $grav['pages']->base(), '/') . $language_append; + $pages_dir = $grav['locator']->findResource('page://'); // if absolute and starts with a base_url move on if (isset($url['scheme']) && Utils::startsWith($url['scheme'], 'http')) { $external = true; - } elseif (($base_url != '' && Utils::startsWith($url_path, $base_url)) || - $url_path == '/' || - Utils::startsWith($url_path, '#')) { - $url_path = $base_url . $url_path; + } elseif ($url_path == '' && isset($url['fragment'])) { + $external = true; + } elseif (($base_url != '' && Utils::startsWith($url_path, $base_url)) || $url_path == '/') { + $url_path = $base_url . $url_path; } else { // see if page is relative to this or absolute diff --git a/tests/unit/Grav/Common/Markdown/ParsedownTest.php b/tests/unit/Grav/Common/Markdown/ParsedownTest.php index fd3d4e36a..d52c0612f 100644 --- a/tests/unit/Grav/Common/Markdown/ParsedownTest.php +++ b/tests/unit/Grav/Common/Markdown/ParsedownTest.php @@ -228,7 +228,7 @@ class ParsedownTest extends \Codeception\TestCase\Test $this->parsedown->text('[With Query](?foo=bar)')); $this->assertSame('

With Param

', $this->parsedown->text('[With Param](/foo:bar)')); - $this->assertSame('

With Anchor

', + $this->assertSame('

With Anchor

', $this->parsedown->text('[With Anchor](#foo)')); $this->config->set('system.languages.supported', ['fr','en']); @@ -244,7 +244,7 @@ class ParsedownTest extends \Codeception\TestCase\Test $this->parsedown->text('[With Query](?foo=bar)')); $this->assertSame('

With Param

', $this->parsedown->text('[With Param](/foo:bar)')); - $this->assertSame('

With Anchor

', + $this->assertSame('

With Anchor

', $this->parsedown->text('[With Anchor](#foo)')); } @@ -256,7 +256,7 @@ class ParsedownTest extends \Codeception\TestCase\Test $this->grav['language'] = new Language($this->grav); $this->uri->initializeWithURL('http://testing.dev/fr/item2/item2-2')->init(); - $this->assertSame('

Current Anchor

', + $this->assertSame('

Current Anchor

', $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)')); @@ -275,12 +275,12 @@ class ParsedownTest extends \Codeception\TestCase\Test $this->grav['language'] = new Language($this->grav); $this->uri->initializeWithURL('http://testing.dev/fr/item2/item2-2')->init(); + $this->assertSame('

Current Anchor

', + $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Peer Anchor

', $this->parsedown->text('[Peer Anchor](../item2-1#foo)')); $this->assertSame('

Peer Anchor 2

', $this->parsedown->text('[Peer Anchor 2](../item2-1/#foo)')); - $this->assertSame('

Current Anchor

', - $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)')); @@ -320,7 +320,7 @@ class ParsedownTest extends \Codeception\TestCase\Test { $this->uri->initializeWithURL('http://testing.dev/item2/item2-2')->init(); - $this->assertSame('

Current Anchor

', + $this->assertSame('

Current Anchor

', $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)')); @@ -335,19 +335,16 @@ class ParsedownTest extends \Codeception\TestCase\Test $this->config->set('system.absolute_urls', true); $this->uri->initializeWithURL('http://testing.dev/item2/item2-2')->init(); + $this->assertSame('

Current Anchor

', + $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Peer Anchor

', $this->parsedown->text('[Peer Anchor](../item2-1#foo)')); $this->assertSame('

Peer Anchor 2

', $this->parsedown->text('[Peer Anchor 2](../item2-1/#foo)')); - $this->assertSame('

Current Anchor

', - $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)')); } - - - public function testAnchorLinksWithPortAbsoluteUrls() { $this->config->set('system.absolute_urls', true); @@ -357,7 +354,7 @@ class ParsedownTest extends \Codeception\TestCase\Test $this->parsedown->text('[Peer Anchor](../item2-1#foo)')); $this->assertSame('

Peer Anchor 2

', $this->parsedown->text('[Peer Anchor 2](../item2-1/#foo)')); - $this->assertSame('

Current Anchor

', + $this->assertSame('

Current Anchor

', $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)')); @@ -371,7 +368,7 @@ class ParsedownTest extends \Codeception\TestCase\Test $this->parsedown->text('[Peer Anchor](../item2-1#foo)')); $this->assertSame('

Peer Anchor 2

', $this->parsedown->text('[Peer Anchor 2](../item2-1/#foo)')); - $this->assertSame('

Current Anchor

', + $this->assertSame('

Current Anchor

', $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)')); @@ -386,7 +383,7 @@ class ParsedownTest extends \Codeception\TestCase\Test $this->parsedown->text('[Peer Anchor](../item2-1#foo)')); $this->assertSame('

Peer Anchor 2

', $this->parsedown->text('[Peer Anchor 2](../item2-1/#foo)')); - $this->assertSame('

Current Anchor

', + $this->assertSame('

Current Anchor

', $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)'));