From 0cd86735c8283b9b03897c5841c3683efb15617b Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Sat, 7 Dec 2019 22:10:27 -0500 Subject: [PATCH] Nested index is not homepage (#1921) A user could place a nested (in the file structure) index page on the root level of the nav. That file should not return `True` for `page.is_homepage`. Fixes #1919. --- docs/about/release-notes.md | 1 + mkdocs/structure/pages.py | 2 +- mkdocs/tests/structure/page_tests.py | 48 ++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/docs/about/release-notes.md b/docs/about/release-notes.md index bb33917c..35564ffa 100644 --- a/docs/about/release-notes.md +++ b/docs/about/release-notes.md @@ -56,6 +56,7 @@ your global navigation uses more than one level, things will likely be broken. ### Other Changes and Additions to Version 1.1 +* Bugfix: Ensure nested index pages do not get identified as the homepage (#1919). * Bugfix: Properly identify deployment version (#1879). * Bugfix: Properly build `ValidationError` message for `custom_dir` (#1849). * Bugfix: Exclude Markdown files and READMEs from theme (#1766). diff --git a/mkdocs/structure/pages.py b/mkdocs/structure/pages.py index b032d779..a15a28a8 100644 --- a/mkdocs/structure/pages.py +++ b/mkdocs/structure/pages.py @@ -93,7 +93,7 @@ class Page(object): @property def is_homepage(self): - return self.is_top_level and self.is_index + return self.is_top_level and self.is_index and self.file.url == '.' @property def url(self): diff --git a/mkdocs/tests/structure/page_tests.py b/mkdocs/tests/structure/page_tests.py index f229c8cb..fd015ead 100644 --- a/mkdocs/tests/structure/page_tests.py +++ b/mkdocs/tests/structure/page_tests.py @@ -70,6 +70,54 @@ class PageTests(unittest.TestCase): self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) + def test_nested_index_page_no_parent(self): + cfg = load_config(docs_dir=self.DOCS_DIR) + fl = File('sub1/index.md', cfg['docs_dir'], cfg['site_dir'], cfg['use_directory_urls']) + pg = Page('Foo', fl, cfg) + pg.parent = None # non-homepage at nav root level; see #1919. + self.assertEqual(pg.url, 'sub1/') + self.assertEqual(pg.abs_url, None) + self.assertEqual(pg.canonical_url, None) + self.assertEqual(pg.edit_url, None) + self.assertEqual(pg.file, fl) + self.assertEqual(pg.content, None) + self.assertFalse(pg.is_homepage) + self.assertTrue(pg.is_index) + self.assertTrue(pg.is_page) + self.assertFalse(pg.is_section) + self.assertTrue(pg.is_top_level) + self.assertEqual(pg.markdown, None) + self.assertEqual(pg.meta, {}) + self.assertEqual(pg.next_page, None) + self.assertEqual(pg.parent, None) + self.assertEqual(pg.previous_page, None) + self.assertEqual(pg.title, 'Foo') + self.assertEqual(pg.toc, []) + + def test_nested_index_page_no_parent_no_directory_urls(self): + cfg = load_config(docs_dir=self.DOCS_DIR, use_directory_urls=False) + fl = File('sub1/index.md', cfg['docs_dir'], cfg['site_dir'], cfg['use_directory_urls']) + pg = Page('Foo', fl, cfg) + pg.parent = None # non-homepage at nav root level; see #1919. + self.assertEqual(pg.url, 'sub1/index.html') + self.assertEqual(pg.abs_url, None) + self.assertEqual(pg.canonical_url, None) + self.assertEqual(pg.edit_url, None) + self.assertEqual(pg.file, fl) + self.assertEqual(pg.content, None) + self.assertFalse(pg.is_homepage) + self.assertTrue(pg.is_index) + self.assertTrue(pg.is_page) + self.assertFalse(pg.is_section) + self.assertTrue(pg.is_top_level) + self.assertEqual(pg.markdown, None) + self.assertEqual(pg.meta, {}) + self.assertEqual(pg.next_page, None) + self.assertEqual(pg.parent, None) + self.assertEqual(pg.previous_page, None) + self.assertEqual(pg.title, 'Foo') + self.assertEqual(pg.toc, []) + def test_nested_nonindex_page(self): cfg = load_config(docs_dir=self.DOCS_DIR) fl = File('sub1/non-index.md', cfg['docs_dir'], cfg['site_dir'], cfg['use_directory_urls'])