From daf97c282bbf835d4ddaf9c2d2e44df60f8096a4 Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Sun, 29 Jan 2017 20:34:13 -0500 Subject: [PATCH] Ensure nav.homepage.url is not blank on error pages. (#1132) Also maintain pattern of ending urls with a slash in nav (all non-error pages do so the error page should also). A couple extra checks to ensure base_url doesn't end in a slash though as it is expected that the string appended to base_url will always begin with a slash. Fixes #1131 --- mkdocs/commands/build.py | 3 ++- mkdocs/nav.py | 2 +- mkdocs/tests/nav_tests.py | 16 ++++++++-------- mkdocs/utils/__init__.py | 2 +- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/mkdocs/commands/build.py b/mkdocs/commands/build.py index 45a3b992..2b6447d5 100644 --- a/mkdocs/commands/build.py +++ b/mkdocs/commands/build.py @@ -76,7 +76,8 @@ def get_global_context(nav, config): return { 'nav': nav, - 'base_url': nav.url_context.make_relative('/'), + # base_url should never end with a slash. + 'base_url': nav.url_context.make_relative('/').rstrip('/'), 'extra_css': extra_css, 'extra_javascript': extra_javascript, diff --git a/mkdocs/nav.py b/mkdocs/nav.py index c005e41e..fb092e66 100644 --- a/mkdocs/nav.py +++ b/mkdocs/nav.py @@ -97,7 +97,7 @@ class URLContext(object): """ if self.force_abs_urls: abs_url = '%s/%s' % (self.base_path.rstrip('/'), utils.path_to_url(url.lstrip('/'))) - return abs_url.rstrip('/') + return abs_url suffix = '/' if (url.endswith('/') and len(url) > 1) else '' # Workaround for bug on `os.path.relpath()` in Python 2.6 diff --git a/mkdocs/tests/nav_tests.py b/mkdocs/tests/nav_tests.py index a7cdbd49..282c1c37 100644 --- a/mkdocs/tests/nav_tests.py +++ b/mkdocs/tests/nav_tests.py @@ -325,10 +325,10 @@ class SiteNavigationTests(unittest.TestCase): self.assertEqual([n.title for n in nav_items], ['Home', 'Running', 'Notes', 'License']) self.assertEqual([n.url for n in nav_items], [ - '', - '/api-guide/running', - '/about/notes', - '/about/sub/license' + '/', + '/api-guide/running/', + '/about/notes/', + '/about/sub/license/' ]) def test_force_abs_urls_with_base(self): @@ -351,10 +351,10 @@ class SiteNavigationTests(unittest.TestCase): self.assertEqual([n.title for n in nav_items], ['Home', 'Running', 'Notes', 'License']) self.assertEqual([n.url for n in nav_items], [ - '/foo', - '/foo/api-guide/running', - '/foo/about/notes', - '/foo/about/sub/license' + '/foo/', + '/foo/api-guide/running/', + '/foo/about/notes/', + '/foo/about/sub/license/' ]) def test_invalid_pages_config(self): diff --git a/mkdocs/utils/__init__.py b/mkdocs/utils/__init__.py index f1f88a5f..438fcd1e 100644 --- a/mkdocs/utils/__init__.py +++ b/mkdocs/utils/__init__.py @@ -286,7 +286,7 @@ def create_media_urls(nav, path_list): continue # We must be looking at a local path. url = path_to_url(path) - relative_url = '%s/%s' % (nav.url_context.make_relative('/'), url) + relative_url = '%s/%s' % (nav.url_context.make_relative('/').rstrip('/'), url) final_urls.append(relative_url) return final_urls