From c1d3520eea2dd15e2e3732cae43a00eecced40a5 Mon Sep 17 00:00:00 2001 From: Oleh Prypin Date: Sat, 3 Feb 2024 23:36:11 +0100 Subject: [PATCH] Editing the `title` should still be possible --- mkdocs/structure/pages.py | 19 ++++++++----------- mkdocs/tests/structure/page_tests.py | 26 +++++++++++++++++--------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/mkdocs/structure/pages.py b/mkdocs/structure/pages.py index 41ee1694..5ad12a79 100644 --- a/mkdocs/structure/pages.py +++ b/mkdocs/structure/pages.py @@ -249,7 +249,13 @@ class Page(StructureItem): if title_from_md is not None: return title_from_md - return self._title_from_filename() + if self.is_homepage: + return 'Home' + title = self.file.name.replace('-', ' ').replace('_', ' ') + # Capitalize if the filename was all lowercase, otherwise leave it as-is. + if title.lower() == title: + title = title.capitalize() + return title @property def content_title(self) -> str: @@ -282,16 +288,7 @@ class Page(StructureItem): return self.meta['title'] if self._title_from_render: return self._title_from_render - return self._title_from_filename() - - def _title_from_filename(self) -> str: - if self.is_homepage: - return 'Home' - title = self.file.name.replace('-', ' ').replace('_', ' ') - # Capitalize if the filename was all lowercase, otherwise leave it as-is. - if title.lower() == title: - title = title.capitalize() - return title + return self.title def render(self, config: MkDocsConfig, files: Files) -> None: """Convert the Markdown source file to HTML as per the config.""" diff --git a/mkdocs/tests/structure/page_tests.py b/mkdocs/tests/structure/page_tests.py index 0bbaf080..311f693a 100644 --- a/mkdocs/tests/structure/page_tests.py +++ b/mkdocs/tests/structure/page_tests.py @@ -314,11 +314,11 @@ class PageTests(unittest.TestCase): self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) + self.assertEqual(pg.title, 'Welcome to MkDocs') self.assertRaises(RuntimeError, lambda: pg.content_title) - self.assertEqual(pg.title, 'Welcome to MkDocs') pg.render(cfg, fl) - self.assertEqual(pg.content_title, 'Welcome to MkDocs') self.assertEqual(pg.title, 'Welcome to MkDocs') + self.assertEqual(pg.content_title, 'Welcome to MkDocs') _SETEXT_CONTENT = dedent( ''' @@ -334,14 +334,13 @@ class PageTests(unittest.TestCase): cfg = load_config() fl = File('testing_setext_title.md', docs_dir, docs_dir, use_directory_urls=True) pg = Page(None, fl, cfg) - self.assertRaises(RuntimeError, lambda: pg.content_title) self.assertIsNone(pg.title) pg.read_source(cfg) - self.assertRaises(RuntimeError, lambda: pg.content_title) self.assertEqual(pg.title, 'Testing setext title') + self.assertRaises(RuntimeError, lambda: pg.content_title) pg.render(cfg, fl) - self.assertEqual(pg.content_title, 'Welcome to MkDocs Setext') self.assertEqual(pg.title, 'Welcome to MkDocs Setext') + self.assertEqual(pg.content_title, 'Welcome to MkDocs Setext') @tempdir(files={'testing_setext_title.md': _SETEXT_CONTENT}) def test_page_title_from_markdown_stripped_anchorlinks(self, docs_dir): @@ -353,8 +352,8 @@ class PageTests(unittest.TestCase): pg = Page(None, fl, cfg) pg.read_source(cfg) pg.render(cfg, fl) - self.assertEqual(pg.content_title, 'Welcome to MkDocs Setext') self.assertEqual(pg.title, 'Welcome to MkDocs Setext') + self.assertEqual(pg.content_title, 'Welcome to MkDocs Setext') _FORMATTING_CONTENT = dedent( ''' @@ -372,8 +371,8 @@ class PageTests(unittest.TestCase): pg = Page(None, fl, cfg) pg.read_source(cfg) pg.render(cfg, fl) - self.assertEqual(pg.content_title, '*Hello — beautiful world') self.assertEqual(pg.title, '*Hello — beautiful world') + self.assertEqual(pg.content_title, '*Hello — beautiful world') _ATTRLIST_CONTENT = dedent( ''' @@ -427,8 +426,12 @@ class PageTests(unittest.TestCase): self.assertEqual(pg.title, 'A Page Title') self.assertEqual(pg.toc, []) pg.render(cfg, fl) - self.assertEqual(pg.content_title, 'A Page Title') self.assertEqual(pg.title, 'A Page Title') + self.assertEqual(pg.content_title, 'A Page Title') + # Test setting the title directly (e.g. through a plugin): + pg.title = 'New title' + self.assertEqual(pg.title, 'New title') + self.assertEqual(pg.content_title, 'A Page Title') def test_page_title_from_filename(self): cfg = load_config(docs_dir=DOCS_DIR) @@ -454,8 +457,13 @@ class PageTests(unittest.TestCase): self.assertRaises(RuntimeError, lambda: pg.content_title) self.assertEqual(pg.title, 'Page title') pg.render(cfg, fl) - self.assertEqual(pg.content_title, 'Page title') self.assertEqual(pg.title, 'Page title') + self.assertEqual(pg.content_title, 'Page title') + # Test setting the title directly (e.g. through a plugin): + pg.title = 'New title' + self.assertEqual(pg.title, 'New title') + # Content title is missing, title still takes precedence. + self.assertEqual(pg.content_title, 'New title') def test_page_title_from_capitalized_filename(self): cfg = load_config(docs_dir=DOCS_DIR)