From 74cd345f76dd01034c804f75e7f16b42e9c0643c Mon Sep 17 00:00:00 2001 From: Christoph Schlosser Date: Thu, 18 Sep 2025 22:05:48 +0200 Subject: g2h: Add breadcrumb navigations to file and tree pages --- g2h/file.py | 11 +++++++++++ g2h/file_page.py | 3 ++- g2h/tree_page.py | 3 ++- 3 files changed, 15 insertions(+), 2 deletions(-) (limited to 'g2h') diff --git a/g2h/file.py b/g2h/file.py index 8f683cd..e07f251 100644 --- a/g2h/file.py +++ b/g2h/file.py @@ -1,5 +1,16 @@ import os +def generate_breadcrumbs(content_subdir, commit, dir, files): + breadcrumbs = '[/](/{})'.format(os.path.join(content_subdir, tree_join(commit, ''))) + subpath = '' + for segment in dir.split(os.sep): + if not segment or len(segment) == 0: + continue + subpath = os.path.join(subpath, sanitize_file_name(segment, files)) + breadcrumbs += '/[{}](/{})'.format(segment, os.path.join(content_subdir, tree_join(commit, subpath))) + return breadcrumbs + + def sanitize_file_name(file_name, files): if not file_name.startswith('.'): return file_name diff --git a/g2h/file_page.py b/g2h/file_page.py index b154ee5..67ddf6d 100644 --- a/g2h/file_page.py +++ b/g2h/file_page.py @@ -2,7 +2,7 @@ import base64 import filetype import os -from .file import sanitize_file_name, tree_join +from .file import generate_breadcrumbs, sanitize_file_name, tree_join from .page import Page from .tree import safe_join @@ -37,6 +37,7 @@ class FilePage(Page): content, file_type = bytes_to_content(file_bytes) return { + 'breadcrumbs': generate_breadcrumbs(self.content_subdir, self.commit, os.path.join(self.file_path, self.file_name), self.tree.blobs), 'content': content, 'content_subdir': self.content_subdir, 'file_extension': os.path.splitext(self.file_name)[1].lstrip('.'), diff --git a/g2h/tree_page.py b/g2h/tree_page.py index 9b7a0d5..c36212c 100644 --- a/g2h/tree_page.py +++ b/g2h/tree_page.py @@ -1,6 +1,6 @@ import os -from .file import sanitize_file_name, tree_join +from .file import generate_breadcrumbs, sanitize_file_name, tree_join from .page import Page from .tree import safe_join @@ -41,6 +41,7 @@ class TreePage(Page): def context(self): return { + 'breadcrumbs': generate_breadcrumbs(self.content_subdir, self.commit, self.sub_tree, self.tree.blobs), 'content_subdir': self.content_subdir, 'entries': self._get_entries(), # TODO: Make this fit the rest of the system. -- cgit v1.2.3