diff options
| -rw-r--r-- | README.md | 2 | ||||
| -rw-r--r-- | g2h/file.py | 11 | ||||
| -rw-r--r-- | g2h/file_page.py | 3 | ||||
| -rw-r--r-- | g2h/tree_page.py | 3 | ||||
| -rw-r--r-- | templates/_breadcrumbs.md | 1 | ||||
| -rw-r--r-- | templates/file.md | 2 | ||||
| -rw-r--r-- | templates/tree.md | 2 | ||||
| -rw-r--r-- | tests/file_page_test.py | 2 | ||||
| -rw-r--r-- | tests/file_test.py | 14 | ||||
| -rw-r--r-- | tests/tree_page_test.py | 2 |
10 files changed, 36 insertions, 6 deletions
@@ -58,7 +58,7 @@ For a full list of options, their defaults and how they're changing the behavior File content in a codeblock with file extension based language detection. For binary files a note that it can't be displayed. - [x] Don't treat pictures as binary files. - - [ ] Breadcrumbs for navigating. + - [x] Breadcrumbs for navigating. - [ ] Add button to download raw file. - [ ] Nav bar for navigating the pages mentioned above. - [ ] Link to special readme, if a readme can be found, rendering markdown. 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. diff --git a/templates/_breadcrumbs.md b/templates/_breadcrumbs.md new file mode 100644 index 0000000..d190b00 --- /dev/null +++ b/templates/_breadcrumbs.md @@ -0,0 +1 @@ +{{ breadcrumbs }} diff --git a/templates/file.md b/templates/file.md index 12a5a81..28f458a 100644 --- a/templates/file.md +++ b/templates/file.md @@ -1,5 +1,7 @@ {% include '_head.md' %} +{% include '_breadcrumbs.md' %} + {% if type == 'text' %} ```{{ file_extension }} {{ content }} diff --git a/templates/tree.md b/templates/tree.md index 53644bc..8a30cee 100644 --- a/templates/tree.md +++ b/templates/tree.md @@ -1,6 +1,8 @@ {% include '_head.md' %} {% if entries %} +{% include '_breadcrumbs.md' %} + | Name | Last modified | |------|---------------| {%- for entry in entries %} diff --git a/tests/file_page_test.py b/tests/file_page_test.py index a1123de..3fff51e 100644 --- a/tests/file_page_test.py +++ b/tests/file_page_test.py @@ -41,6 +41,7 @@ def test_context(): assert(context['file_extension'] == 'txt') assert(context['title'] == 'file test: test_file.txt') assert(context['type'] == 'text') + assert(context['breadcrumbs'] == '[/](/file/content/123/t/)/[test_file.txt](/file/content/123/t/test_file.txt)') def test_context_dot_file(): file = MagicMock() @@ -57,6 +58,7 @@ def test_context_dot_file(): assert(context['file_extension'] == '') assert(context['title'] == 'file test: .file') assert(context['type'] == 'text') + assert(context['breadcrumbs'] == '[/](/file/content/123/t/)/[.file](/file/content/123/t/_file)') def test_bytes_to_content_text(): content, type = bytes_to_content('test'.encode()) diff --git a/tests/file_test.py b/tests/file_test.py index 838df71..d1b40bd 100644 --- a/tests/file_test.py +++ b/tests/file_test.py @@ -1,9 +1,9 @@ import os import pytest -from unittest.mock import Mock +from unittest.mock import MagicMock, Mock -from g2h.file import sanitize_file_name, tree_join +from g2h.file import generate_breadcrumbs, sanitize_file_name, tree_join def test_sanitize_not_necessary(): assert(sanitize_file_name('foo', None) == 'foo') @@ -24,3 +24,13 @@ def test_tree_join(): commit = Mock() commit.hexsha = '123' assert(tree_join(commit, 'test') == os.path.join('123', 't', 'test')) + +def test_generate_breadcrumbs(): + commit = Mock() + commit.hexsha = '123' + assert(generate_breadcrumbs('', commit, '', None) == '[/](/123/t/)') + assert(generate_breadcrumbs('', commit, 'sub', None) == '[/](/123/t/)/[sub](/123/t/sub)') + assert(generate_breadcrumbs('', commit, 'sub/dir', None) == '[/](/123/t/)/[sub](/123/t/sub)/[dir](/123/t/sub/dir)') + assert(generate_breadcrumbs('', commit, 'sub/dir/file.txt', None) == '[/](/123/t/)/[sub](/123/t/sub)/[dir](/123/t/sub/dir)/[file.txt](/123/t/sub/dir/file.txt)') + assert(generate_breadcrumbs('content sub', commit, 'sub', None) == '[/](/content sub/123/t/)/[sub](/content sub/123/t/sub)') + assert(generate_breadcrumbs('', commit, 'sub/.file', MagicMock()) == '[/](/123/t/)/[sub](/123/t/sub)/[.file](/123/t/sub/_file)') diff --git a/tests/tree_page_test.py b/tests/tree_page_test.py index 891e940..a298728 100644 --- a/tests/tree_page_test.py +++ b/tests/tree_page_test.py @@ -53,6 +53,7 @@ def test_context_empty(): assert(context['content_subdir'] == '') assert(context['subdir'] == '/123/t/tree/path') assert(context['title'] == 'tree test: Tree') + assert(context['breadcrumbs'] == '[/](/123/t/)') def test_context_entries(): tree = MagicMock() @@ -111,7 +112,6 @@ def test_get_files(): commit.tree = tree expected = [] for case in [ None, '.file', 'README', 'main.cc' ]: - print(str(case)) if case: add_node(tree, case) expected.append(case) |