From d89fd151ca432d200879571d0409a2fa5f37a7b6 Mon Sep 17 00:00:00 2001 From: "Brian S. Stephan" Date: Sat, 27 Feb 2021 00:30:32 -0600 Subject: [PATCH] use just the page part of the path in breadcrumbs rather than showing the full path (e.g. /foo/bar/baz) in breadcrumbs when the page doesn't have a Title, show just the leaf (baz) Closes #4 --- incorporealcms/pages.py | 10 +++++++++- tests/test_pages.py | 17 +++++++++++++---- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/incorporealcms/pages.py b/incorporealcms/pages.py index 7e7da0d..911df60 100644 --- a/incorporealcms/pages.py +++ b/incorporealcms/pages.py @@ -130,5 +130,13 @@ def generate_parent_navs(path): with app.open_instance_resource(path, 'r') as entry_file: entry = entry_file.read() _ = Markup(md.convert(entry)) - page_name = " ".join(md.Meta.get('title')) if md.Meta.get('title') else request_path + page_name = (" ".join(md.Meta.get('title')) if md.Meta.get('title') + else request_path_to_breadcrumb_display(request_path)) return generate_parent_navs(parent_resource_path) + [(page_name, request_path)] + + +def request_path_to_breadcrumb_display(path): + """Given a request path, e.g. "/foo/bar/baz/", turn it into breadcrumby text "baz".""" + undired = path.rstrip('/') + leaf = undired[undired.rfind('/'):] + return leaf.strip('/') diff --git a/tests/test_pages.py b/tests/test_pages.py index ce41165..a61c535 100644 --- a/tests/test_pages.py +++ b/tests/test_pages.py @@ -3,7 +3,7 @@ import pytest from werkzeug.http import dump_cookie from incorporealcms.pages import (generate_parent_navs, instance_resource_path_to_request_path, render, - request_path_to_instance_resource_path) + request_path_to_breadcrumb_display, request_path_to_instance_resource_path) def test_generate_page_navs_index(app): @@ -15,13 +15,13 @@ def test_generate_page_navs_index(app): def test_generate_page_navs_subdir_index(app): """Test that dir pages have navs to the root and themselves.""" with app.app_context(): - assert generate_parent_navs('pages/subdir/index.md') == [('incorporeal.org', '/'), ('/subdir/', '/subdir/')] + assert generate_parent_navs('pages/subdir/index.md') == [('incorporeal.org', '/'), ('subdir', '/subdir/')] def test_generate_page_navs_subdir_real_page(app): """Test that real pages have navs to the root, their parent, and themselves.""" with app.app_context(): - assert generate_parent_navs('pages/subdir/page.md') == [('incorporeal.org', '/'), ('/subdir/', '/subdir/'), + assert generate_parent_navs('pages/subdir/page.md') == [('incorporeal.org', '/'), ('subdir', '/subdir/'), ('Page', '/subdir/page')] @@ -31,7 +31,7 @@ def test_generate_page_navs_subdir_with_title_parsing_real_page(app): assert generate_parent_navs('pages/subdir-with-title/page.md') == [ ('incorporeal.org', '/'), ('SUB!', '/subdir-with-title/'), - ('/subdir-with-title/page', '/subdir-with-title/page') + ('page', '/subdir-with-title/page') ] @@ -162,3 +162,12 @@ def test_request_resource_request_page(app): """Test that a request can resolve to a resource and back to a request.""" with app.test_request_context(): instance_resource_path_to_request_path(request_path_to_instance_resource_path('no-title')) == 'no-title' + + +def test_request_path_to_breadcrumb_display_patterns(): + """Test various conversions from request path to leaf nodes for display in the breadcrumbs.""" + assert request_path_to_breadcrumb_display('/foo') == 'foo' + assert request_path_to_breadcrumb_display('/foo/') == 'foo' + assert request_path_to_breadcrumb_display('/foo/bar') == 'bar' + assert request_path_to_breadcrumb_display('/foo/bar/') == 'bar' + assert request_path_to_breadcrumb_display('/') == ''